如何从动态添加到 RowUpdate 事件中的 GridView 的下拉列表列表中检索值
本文关键字:下拉列表 GridView 列表 检索 事件 动态 添加 RowUpdate | 更新日期: 2023-09-27 18:36:39
我对 ASP.NET 很陌生,而且总体上是真正的编程。我有一个 GridView,我在 RowDataBound 事件中的编辑中添加了一个 DropDownList。现有控件是只读的,在编辑时似乎不显示。
protected void GridViewVehicles_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
if (e.Row.RowState == DataControlRowState.Edit)
{
DropDownList ddlVehicles = GetVehicles();
string make = e.Row.Cells[9].Text;
ddlVehicles.Items.FindByText(reportsTo).Selected = true;
e.Row.Cells[10].Controls.Add(ddlVehicles);
}
}
}
问题是我似乎无法访问 RowUpdate 事件中下拉列表的选定值。该表单元格的控件计数似乎为 0。以下抛出和参数超出范围异常。
protected void GridViewEmployees_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
string vehicle = ((DropDownList)(row.Cells[10].Controls[0])).SelectedValue;
}
在Chrome调试器中,我确实看到了发布的正确值,但是我只是不知道如何访问它。
我已经读到可以将OnSelectedIndexChanged事件用于DropDownList并将值存储在ViewState中,但是我也遇到了困难。
如有任何关于如何最好地开展工作的指导,将不胜感激。提前感谢!
看起来方法GetVehicles()
正在动态创建下拉列表,因为您要将下拉列表添加到第二个 if 语句的最后一行的控件集合中。
动态创建控件时,必须在每次回发时重新创建它们。
相反,请将下拉控件放在 EditItemTemplate
内,然后使用 FindControl
方法查找此控件,并将其填充到代码后面,就像现在所做的那样。
下面是 GridView 定义的示例:
<asp:GridView runat="server" ID="GridViewVehicles" OnRowDataBound="GridViewVehicles_RowDataBound" OnRowUpdating="GridViewVehicles_RowUpdating">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<!-- Text of selected drop-down item -->
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList runat="server" ID="ddlVehicles" />
</EditItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
和代码隐藏:
protected void GridViewVehicles_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow && e.Row.RowState == DataControlRowState.Edit)
{
//Get the drop-down datasource and perform databinding
}
}
protected void GridViewVehicles_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
DropDownList ddlVehicles = GridViewVehicles.Rows[e.RowIndex].FindControl("ddlVehicles") as DropDownList;
if (ddlVehicles != null)
{
string selectedValue = ddlVehicles.SelectedValue;
}
}
希望对您有所帮助!
问候
乌罗什