2014-12-16 4 views
0

В какой-то момент мне удалось выбрать статический DDL в моем представлении сетки, а затем обновить сетку в зависимости от выбранного мной выбора. В какой-то момент это перестало работать, и я не могу его воскресить.Раскрывающийся список в виде сетки: невозможно получить выбранное значение

Ниже приведен (упрощенный) код, где все работает кроме Получение выбранного значения из DDL - оно всегда возвращает первый элемент списка. Любая идея, где я пошла не так?

protected void gv_Pending_RowDataBound(object sender, GridViewRowEventArgs e) 
     { 
      if (e.Row.RowType == DataControlRowType.DataRow && (e.Row.RowState & DataControlRowState.Edit) == DataControlRowState.Edit) 
      { 
       ((DropDownList)e.Row.FindControl("ddl_Pending")).Enabled = true;   
      } 

     } 

    protected void gv_Pending_RowUpdating(object sender, GridViewUpdateEventArgs e) 
     { 
      int index = Convert.ToInt32(e.RowIndex); 
      GridViewRow row = gv_Pending.Rows[index]; 

      string adm_appr = ((DropDownList)row.FindControl("ddl_Pending")).SelectedValue.ToString(); 
     } 

    <asp:GridView ID="gv_Pending" runat="server" 
     OnRowDataBound="gv_Pending_RowDataBound" OnRowUpdating="gv_Pending_RowUpdating" OnRowEditing="gv_Pending_RowEditing" 
     OnRowCancelingEdit="gv_Pending_RowCancelingEdit" OnRowCommand="gv_Pending_RowCommand" 
     ClientIDMode="Static" > 
     <Columns> 
      <asp:CommandField ShowCancelButton="true" ShowEditButton="true" /> 
      <asp:TemplateField HeaderText="Approval" Visible="true"> 
       <ItemTemplate> 
        <asp:DropDownList ID="ddl_Pending" runat="server" OnSelectedIndexChanged="ddlPending_SelectedIndexChanged" 
         Enabled="false" > 
         <asp:ListItem >Select One</asp:ListItem> 
         <asp:ListItem >Standard Privilege</asp:ListItem> 
         <asp:ListItem >Admin Privilege</asp:ListItem> 
         <asp:ListItem >Deny Request</asp:ListItem> 
         <asp:ListItem >Remove Account</asp:ListItem> 
        </asp:DropDownList> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:BoundField HeaderText="Field 1" DataField="Field 1 data" ReadOnly="true" /> 
      <asp:BoundField HeaderText="Field 2" DataField="Field 2 data" ReadOnly="true" /> 
     </Columns> 
    </asp:GridView> 

ответ

0

Для других, кто может последовать за мной, это был вопрос последовательности загрузки.

В частности, я вызывал событие загрузки сетки на page_load, postback. Это сбросит DDL и, естественно, уничтожил выбор, сделанный во время события обновления строки. Удалив вызов события загрузки сетки из page_load, выбор DDL, сделанный во время события обновления строки, сохраняется, как ожидалось.