在RowUpdating事件asp.net中检索DropDownList值

时间:2013-08-14 15:14:09

标签: asp.net drop-down-menu updating

这是我的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”将返回空字符串(“”)。

那么有什么好主意吗?

1 个答案:

答案 0 :(得分:4)

听起来你犯了一个经典错误,就是不把你的数据绑定代码放在if (!Page.IsPostBack)块中。因此,您的GridView重新绑定,并在RowUpdating事件中获得默认值(而不是您选择的内容)。

无论您在哪里绑定GridView,例如在Page_Load中,您都需要这样做:

if (!Page.IsPostBack)
{
    BindGrid();
}

其中“BindGrid()”是您调用数据绑定GridView的任何代码。


在一个稍微不相关的注释中,您实际上可以使用传递给该方法的GridViewUpdateEventArgs参数来获取更新的值(而不是使用FindControl来获取DropDownList,然后获取值)。