2013-04-12 146 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(); 

}