C# 在Gridview\u行更新事件中访问动态生成的dropdownlist
我使用的是AutoGenerateColumns=True的Gridview,因此Gridview列是动态生成的。现在在编辑的情况下,我为gridview中的一个字段动态添加dropdownlist。请参阅以下代码:C# 在Gridview\u行更新事件中访问动态生成的dropdownlist,c#,asp.net,gridview,C#,Asp.net,Gridview,我使用的是AutoGenerateColumns=True的Gridview,因此Gridview列是动态生成的。现在在编辑的情况下,我为gridview中的一个字段动态添加dropdownlist。请参阅以下代码: protected void grdViewConfig_RowEditing(object sender, GridViewEditEventArgs e) { grdViewConfig.EditIndex = e.NewEditIndex;
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_RowUpdate事件中,我尝试以类似的方式获取dropdownlist,但无法获取它。GetAllControlsOfType是一个扩展方法,它将返回所选父项下的所有子控件。在这种情况下,父控件是gridview单元格,子控件是dropdownlist。但它正在返回空值
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;
}
}
}
}
我错过了什么?请帮忙。如果需要更多信息,也请告诉我
提前感谢。每次回发时都需要重新创建动态生成的控件。在本例中,当您点击grdViewConfig_行更新处理程序时,您创建的DropDownList控件不再存在 通常,在这种情况下,您会将AutoGenerateColumns设置为false,并手动定义您的列,这将允许您定义一个TemplateField,其中包含只读模式的ItemTemplate和编辑模式的EditItemTemplate,然后可以包含DropDownList