【问题标题】:Update GridView after a re-order重新订购后更新 GridView
【发布时间】:2012-01-12 00:16:58
【问题描述】:

我有一个依赖于三个级联下拉列表的网格视图(在更新面板中)。当用户在 gridview 中编辑单元格、更改下拉菜单并单击“显示”时,它会调用以下代码隐藏:

protected void Save_Click(Object sender, EventArgs e)
    {
        foreach (GridViewRow gvr in MasterDisplay.Rows)
            MasterDisplay.UpdateRow(gvr.RowIndex, false);
        MasterDisplay.DataBind();
}

问题是下拉菜单会改变网格视图,所以更新的单元格会乱序。一个例子:假设我有六个项目:A1、A2、A3、B1、B2、B3。如果我编辑 B2 的价格,然后更改显示“首先显示 Bs”的下拉菜单,在结果页面上我将看到 A2 的新价格(即,顺序中的第五个)。

我认为这是因为在 UpdateRow() 中我们只是根据索引进行更新 (gvr.RowIndex),因此 GridView 会以某种方式重新显示(不会丢失新的价格数据!)然后更新。

关于如何确保将这些更改保存到适当的行,而不仅仅是现在恰好与以前具有相同索引的行有什么想法吗?

【问题讨论】:

  • 作为记录,我想在显示点击上执行此操作,因为我会抛出一个模式说“保存更改?Y/N”,其中“Y”是一个 asp:Button 绑定到 Save_Click .

标签: gridview code-behind


【解决方案1】:

所以,随着越来越普遍,我想我会回答我自己的问题,以防有一天有人偶然发现这个问题。 (即http://xkcd.com/979/

基本上,我创建了三个标签,它们从 Page_Load 上的 Request.QueryString 提供变量(变量在 url 中传递)。这些标签现在是构建网格视图的 SqlDataSource 的 ControlParameters。我还填充了这个变量的下拉列表。即

var myInternalVar1 = Request.QueryString["myVariable1"];
myLabel1.Text = myInternalVar1;
myDropDown1.SelectedValue = myInternalVar1;

然后用户可以正常使用下拉菜单(从他们的末尾)。当用户点击保存时,我运行当前代码(见问题),然后添加:

myLabel1.Text = myDropDown1.SelectedValue;
Response.Redirect("~/mysite.aspx?myVariable1=" + myLabel1.Text);

这意味着不再有回发,而是导航。

一个重要提示:我必须在 if(!Page.IsPostBack) 中填写所有下拉列表,因为我搭载的预先存在的函数似乎被多次调用。不知道为什么要调用它们,因为它们仅在一个声明中 (在使用下拉菜单后被调用了 3 次,即使外部 gridview 在更新面板之外)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    相关资源
    最近更新 更多