重新订购后更新GridView

重新订购后更新GridView,gridview,code-behind,Gridview,Code Behind,我有一个gridview依赖于三个级联下拉列表(在updatepanel中)。当用户在gridview中编辑单元格、更改下拉列表并单击“显示”时,将调用以下代码隐藏: protected void Save_Click(Object sender, EventArgs e) { foreach (GridViewRow gvr in MasterDisplay.Rows) MasterDisplay.UpdateRow(gvr.RowIndex,

我有一个gridview依赖于三个级联下拉列表(在updatepanel中)。当用户在gridview中编辑单元格、更改下拉列表并单击“显示”时,将调用以下代码隐藏:

protected void Save_Click(Object sender, EventArgs e)
    {
        foreach (GridViewRow gvr in MasterDisplay.Rows)
            MasterDisplay.UpdateRow(gvr.RowIndex, false);
        MasterDisplay.DataBind();
}
问题是,下拉列表将更改gridview,因此更新的单元格会出现顺序问题。例如:假设我有六项:A1、A2、A3、B1、B2、B3。如果我编辑B2的价格,然后更改显示“show Bs first”的下拉列表,在结果页面上,我将看到A2的新价格(即,顺序中第五位的价格)

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


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

因此,随着越来越普遍的情况,我想我会回答我自己的问题,以防有一天有人偶然发现这一点。(即)

基本上,我创建了三个标签,它们是从页面加载上的Request.QueryString(变量在url中传递)中输入的变量。这些标签现在是构建gridview的SqlDataSource的控制参数。我还填充了这个变量的下拉列表。即

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)中的所有下拉列表,因为我附带的现有函数似乎被多次调用。不知道为什么他们会被叫来,因为他们只在一份声明中
(在使用下拉菜单后被调用了三次,即使外部gridview在updatepanel之外)

对于记录,我想在显示单击时执行此操作,因为我会弹出一个模式,说“保存更改?Y/N”,其中“Y”是一个asp:按钮,绑定到保存\u单击。