这是我的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”将返回空字符串(“”)。
那么有什么好主意吗?
答案 0 :(得分:4)
听起来你犯了一个经典错误,就是不把你的数据绑定代码放在if (!Page.IsPostBack)
块中。因此,您的GridView重新绑定,并在RowUpdating事件中获得默认值(而不是您选择的内容)。
无论您在哪里绑定GridView,例如在Page_Load中,您都需要这样做:
if (!Page.IsPostBack)
{
BindGrid();
}
其中“BindGrid()”是您调用数据绑定GridView的任何代码。
在一个稍微不相关的注释中,您实际上可以使用传递给该方法的GridViewUpdateEventArgs参数来获取更新的值(而不是使用FindControl来获取DropDownList,然后获取值)。