这是我的 aspx 代码:
<EditItemTemplate>
<asp:DropDownList ID="ddlTotalColumn" runat="server">
<asp:ListItem Value="">Select value</asp:ListItem>
<asp:ListItem Value="0">1</asp:ListItem>
<asp:ListItem Value="1">2</asp:ListItem>
</asp:DropDownList>
</EditItemTemplate>
我的 aspx.cs 代码:
protected void gvTest_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
GridViewRow selected_row = gvTest.Rows[e.RowIndex];
var total_column_drop_down_list = (DropDownList)selected_row.FindControl("ddlTotalColumn");
int column_string = Convert.ToInt32(total_column_drop_down_list.SelectedItem.Value);
gvTest.EditIndex = -1;
...
}
在这一行:int column_string = Convert.ToInt32(total_column_drop_down_list.SelectedItem.Value); 我遇到错误:“输入字符串格式不正确”,因为“total_column_drop_down_list.SelectedItem.Value”将返回空字符串 ("")。
那么有什么好主意吗?
最佳答案
听起来您犯了一个典型的错误,即没有将数据绑定(bind)代码放入 if (!Page.IsPostBack)
block 中。因此,您的 GridView 会重新绑定(bind),并且您会在 RowUpdating 事件中获得默认值(而不是您选择的值)。
无论您在何处绑定(bind) GridView,例如在 Page_Load 中,您都需要执行以下操作:
if (!Page.IsPostBack)
{
BindGrid();
}
其中“BindGrid()”是您调用的用于数据绑定(bind) GridView 的任何代码。
在一个稍微不相关的注释中,您实际上可以使用 GridViewUpdateEventArgs传递给该方法的参数以获取更新的值(而不是使用 FindControl 获取 DropDownList,然后获取值)。
关于asp.net - 检索 RowUpdating 事件中的 DropDownList 值 asp.net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18235582/