2012-05-29 4 views
0

Я делаю некоторые сложные вещи с gridview, и единственное, что стоит между мной и завершением, это тот факт, что я не могу программно настроить привязку данных. Я сделал большую часть этой проблемы, за исключением того, что я все еще не могу получить источник данных для обновления.Однонаправленная сетка gridview - только обновление?

Я заменил одно поле ввода зависимым выпадающим списком и получил его, чтобы сохранить значение поля в databind. Я не могу привязать его напрямую, потому что получаю «Выбранное значение не в списке элементов» или что-то в этом роде, поэтому мне нужно найти способ заставить сетку или источник данных принять значение из этого зависимого раскрывающегося списка и применить его к Таблица.

Любая помощь?

<asp:GridView ID="gvManager" runat="server" 
     AutoGenerateColumns="False" DataSourceID="ldsCampaigns" 
     ondatabound="gvManager_DataBound" 
     onrowediting="gvManager_RowEditing" DataKeyNames="ContentID"> 
     <Columns> 
      <asp:CommandField ShowEditButton="True" /> 
      <asp:BoundField DataField="ContentID" HeaderText="ContentID" 
       SortExpression="ContentID" /> 
      <asp:BoundField DataField="CampaignName" HeaderText="CampaignName" 
       SortExpression="CampaignName" /> 
      <asp:BoundField DataField="CampaignTitle" HeaderText="CampaignTitle" 
       SortExpression="CampaignTitle" /> 
      <asp:BoundField DataField="CampaignTagLine" HeaderText="CampaignTagLine" 
       SortExpression="CampaignTagLine" /> 
      <asp:TemplateField HeaderText="CampaignData" SortExpression="CampaignData"> 
       <EditItemTemplate> 
        <asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="ldsTables" 
         DataTextField="CMSTables" DataValueField="CMSTables" 
         SelectedValue='<%# Bind("CampaignData") %>' onload="DropDownList1_Load"> 
        </asp:DropDownList> 
        <asp:LinqDataSource ID="ldsTables" runat="server" 
         ContextTypeName="DataContext" 
         onselecting="ldsTables_Selecting" Select="new (CMSTables)" 
         TableName="CampaignTables"> 
        </asp:LinqDataSource> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="Label1" runat="server" Text='<%# Bind("CampaignData") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="DataColumn" 
       SortExpression="DataColumn"> 
       <EditItemTemplate> 
        <asp:DropDownList ID="DropDownList2" runat="server" style="margin-bottom: 0px" 
         SelectedValue='<%# Bind("DataColumn") %>' Visible="False"> 
        </asp:DropDownList> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="Label2" runat="server" 
         Text='<%# Bind("DataColumn") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:BoundField DataField="CampaignLink" HeaderText="CampaignLink" 
       SortExpression="CampaignLink" /> 
      <asp:BoundField DataField="Sunrise" HeaderText="Sunrise" 
       SortExpression="Sunrise" /> 
      <asp:BoundField DataField="Sunset" HeaderText="Sunset" 
       SortExpression="Sunset" /> 
      <asp:BoundField DataField="OwnerID" HeaderText="OwnerID" 
       SortExpression="OwnerID" /> 
      <asp:CheckBoxField DataField="Enabled" HeaderText="Enabled" 
       SortExpression="Enabled" /> 
     </Columns> 
    </asp:GridView> 

ответ

0

Если я понял вас вопрос правильно, у вас есть GridView и внутри GridView есть DropDownList, об изменении DropDownList вы хотите, чтобы получить это значение и получать некоторые данные или что вы хотите с ним, если это это то, что вы сделали:

1 -Вставьте свойство dropdownlist AutoPostBack = "true".

2-На dropdownlist_indexchanged события для DropDownList сделать следующее:

protected void dropdownlist1_indexchanged(sender object,eventargs e) 
{ 
    //Because the dropdownlist is inside the gridview you can't get data directly 
    //You will have to parse the sender object which will retrieve the dropdownlist 
    DropdownList ddl = (DropdownList)sender; 
    //You can then extract the data from the dropdownlist 
} 
0

Для любого будущего отчаянного программиста, я должен был обновить источник данных LINQ код на обновленном событии:

protected void ldsCampaigns_Updated(object sender, LinqDataSourceStatusEventArgs e) 
    { 
     using (DashboardDataContext c = new DashboardDataContext()) 
     { 
      Label Label3 = gvManager.Rows[gvManager.EditIndex].FindControl("Label4") as Label; 

      List<CMSCampaigns> change = c.CMSCampaigns.Where(s => s.ContentID == Convert.ToInt16(Label3.Text)).ToList(); 

      DropDownList DropDownList2 = gvDashboardManager.Rows[gvDashboardManager.EditIndex].FindControl("DropDownList2") as DropDownList; 


      change[0].DataColumn = DropDownList2.SelectedValue.ToString(); 

      c.SubmitChanges(); 
     } 
    } 

Это самый кластерный кластер, который я когда-либо делал.

Смежные вопросы