2

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

那么有什么好主意吗?

4

1 回答 1

4

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

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

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

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


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

于 2013-08-14T15:17:33.397 回答