2014-09-05 41 views
0

我正在使用帶有AutoGenerateColumns =「True」的Gridview,因此gridview列是動態生成的。現在在編輯的情況下,我爲gridview中的一個字段動態添加dropdownlist。請看下面的代碼:在Gridview_RowUpdating事件中訪問動態生成的下拉列表

protected void grdViewConfig_RowEditing(object sender, GridViewEditEventArgs e) 
    { 
     grdViewConfig.EditIndex = e.NewEditIndex;    
     BindGridView(); 

     clientBAL = new TMIWsBALClient(); 
     var lstAppIds = clientBAL.GetDistinctApplicationIds(); 

     GridViewRow grdRow = grdViewConfig.Rows[e.NewEditIndex]; 

     for (int i = 0; i < grdRow.Cells.Count; i++) 
     { 
      if (grdRow.Cells[i].GetType().Equals(typeof(DataControlFieldCell))) 
      { 
       DataControlFieldCell dcField = (DataControlFieldCell)grdRow.Cells[i]; 
       if (dcField.ContainingField.HeaderText.ToLower().Equals("applicationid")) 
       {       

        DropDownList drpDwnAppIds = new DropDownList(); 
        drpDwnAppIds.ID = "drpDwnAppIds"; 
        drpDwnAppIds.DataSource = lstAppIds;       
        drpDwnAppIds.DataBind(); 

        var tb = dcField.GetAllControlsOfType<TextBox>(); ;// grdRow.Cells[i].GetAllControlsOfType<TextBox>(); 
        TextBox firstTb = (TextBox)tb.First();       
        foreach (ListItem lstItem in drpDwnAppIds.Items) 
        { 
         if (firstTb.Text.Equals(lstItem.Text, StringComparison.CurrentCultureIgnoreCase)) 
         { 
          lstItem.Selected = true; 
         } 
        } 

        dcField.Controls.Remove(firstTb); 
        dcField.Controls.Add(drpDwnAppIds); 
       } 
      }    

     }    

    } 

現在Gridview_RowUpdating事件,我想在獲取類似的方式下拉列表,但我無法得到它。 GetAllControlsOfType()是一個擴展方法,它將返回所選父項下的所有子控件。在這種情況下,parent是gridview單元格,child control是下拉列表。但它返回null。

protected void grdViewConfig_RowUpdating(object sender, GridViewUpdateEventArgs e) 
    { 
     strTableName = txtTable.Text.Trim(); 

     string strAppId; 
     GridViewRow grdRow = grdViewConfig.Rows[grdViewConfig.EditIndex]; 

     for (int i = 0; i < grdRow.Cells.Count; i++) 
     { 
      if (grdRow.Cells[i].GetType().Equals(typeof(DataControlFieldCell))) 
      { 
       DataControlFieldCell dcField = (DataControlFieldCell)grdRow.Cells[i]; 
       if (dcField.ContainingField.HeaderText.ToLower().Equals("applicationid")) 
       { 
        var drpDwn = dcField.GetAllControlsOfType<DropDownList>(); 
        DropDownList drpDwnAppIds = (DropDownList)drpDwn.First(); 
        strAppId = drpDwnAppIds.SelectedValue; 
       } 
      } 

     }   

    } 

我錯過了什麼?請幫忙。也讓我知道是否需要更多信息。

預先感謝您。

回答

0

動態生成的控件需要在每次回發時重新創建。在你的情況下,當你點擊grdViewConfig_RowUpdating處理程序時,你創建的DropDownList控件不再存在。

通常在這種情況下,您可以將AutoGenerateColumns設置爲false並手動定義列,這將允許您定義一個TemplateField,其中包含用於只讀模式的ItemTemplate和用於編輯模式的EditItemTemplate,然後可以包含您的DropDownList。

相關問題