2013-04-12 112 views
0

我有一个gridview里面的列表框,当你点击编辑时出现,它有一个你可以选择多个事件类型的列表。当我单击更新按钮时,我无法弄清楚如何更新我的实体。我需要能够使用gridview中的列表框中的选择来更新实体集合。 gridview正在使用一个实体数据源。以下是gridview中的列表框。GridView中的ASP.NET列表框

<asp:TemplateField HeaderText="Event Type"> 
      <ItemTemplate> 
       <asp:Label runat="server" ID="eventTypeLabel" Text="<%#VenueExplorer.Utilities.StringUtils.convertEventsToCommaString(Container.DataItem) %>" /> 
      </ItemTemplate> 
      <EditItemTemplate> 
       <asp:ListBox ID="eventListbox" runat="server" DataSourceID="eventTypeDataSource" DataValueField="EventTypeID" DataTextField="EventType" SelectionMode="Multiple"></asp:ListBox> 
      </EditItemTemplate> 
     </asp:TemplateField> 

有没有一种方法可以在执行实际保存之前更新绑定到gridview的实体?

+0

是各行上的更新按钮?如果是这样的话,只需将其修改为您的需求:http://adsanti.wordpress.com/2011/07/19/gridview-dropdownlist-postback-to-load-info/ – Andres

+0

在您的更新事件中,您只需添加一个逻辑来循环你的列表框。如果它不在gridview中,就和你一样。 – briskovich

+0

下面的答案是否为您解决了这个问题?请给我们一个更新。 – McCee

回答

0

在您的GridViewRowUpdating事件期间,您可以捕获ListBox的选定值。

不知道您的完整标记或数据库结构,我只能模拟预期的代码。像这样的东西,但你显然需要修改,以满足您的需求:

protected void grdView_RowUpdating(object sender, GridViewUpdateEventArgs e) 
{ 
    ListBox eventListbox = (ListBox)grdViewName.Rows[e.RowIndex].Cells[ZeroBasedCellNumberOfTheListBox].FindControl("eventListbox"); 

    // Retrieve the currently selected entity (row) from the database 
    ParentEntity yourParentEntity = from entity in DataContext.ParentEntity where entity.ID == grdViewName.Rows[e.RowIndex].Cells[IndexOfYourEntitysID].Text; 

    foreach (ListItem item in eventListbox.Items) 
    { 
     if (item.Selected) 
     { 
      EventType eventType = new EventType(); 
      eventType.ID = item.Value; 
      eventType.Name = item.Text; 

      yourParentEntity.EventTypes.Add(eventType);   } 
    } 

    DataContext.Commit(); 

}