C#gridview列顺序重置

C#gridview列顺序重置,c#,asp.net,gridview,C#,Asp.net,Gridview,我试图根据用户对web应用程序的需求动态地重新排列gridview列 例如,假设默认表以A B C D列开始。。。wxyz 用户调出另一个表,但它必须具有C D E F。。。Y Z A B 我目前的实施情况如下: <asp:GridView ID="lettertable" ClientIDMode="Static" runat="server" NullDisplayText="" AutoGenerateColumns="False"> <

我试图根据用户对web应用程序的需求动态地重新排列gridview列

例如,假设默认表以A B C D列开始。。。wxyz

用户调出另一个表,但它必须具有C D E F。。。Y Z A B

我目前的实施情况如下:

       <asp:GridView ID="lettertable" ClientIDMode="Static" runat="server" NullDisplayText="" AutoGenerateColumns="False">

          <Columns>
               <asp:BoundField DataField="A" ReadOnly="false" ItemStyle-CssClass="tlet ssA" />
               <asp:BoundField DataField="B" ReadOnly="false" ItemStyle-CssClass="tlet ssB" />
               <asp:BoundField DataField="C" ReadOnly="false" ItemStyle-CssClass="tlet ssC" />
               <asp:BoundField DataField="D" ReadOnly="false" ItemStyle-CssClass="tlet ssD" />
               <asp:BoundField DataField="E" ReadOnly="false" ItemStyle-CssClass="tlet ssE" />
          ...etc
          </Columns>
      </asp:GridView>
         if (letchg == 0)
            {
                for (int i = 1; i < rep; i++)
                {
                    var columnMove = grid.Columns[1];
                    grid.Columns.RemoveAt(1);
                    grid.Columns.Insert((26), columnMove);
                }
            }
            if (letchg == 2)
            {
                for (int i = 1; i < rep; i++)
                {
                    var columnMove = grid.Columns[1];
                    grid.Columns.RemoveAt(1);
                    grid.Columns.Insert((26), columnMove);
                }
            }
            if (letchg == -2)
            {
                for (int i = 1; i < rep; i++)
                {
                    var columnMove = grid.Columns[1];
                    grid.Columns.RemoveAt(1);
                    grid.Columns.Insert((26), columnMove);
                }
            }
        }
codebehind涉及一组相当广泛的条件(用于说明启动与非启动、同一组记录与跨不同记录),如下所示:

       <asp:GridView ID="lettertable" ClientIDMode="Static" runat="server" NullDisplayText="" AutoGenerateColumns="False">

          <Columns>
               <asp:BoundField DataField="A" ReadOnly="false" ItemStyle-CssClass="tlet ssA" />
               <asp:BoundField DataField="B" ReadOnly="false" ItemStyle-CssClass="tlet ssB" />
               <asp:BoundField DataField="C" ReadOnly="false" ItemStyle-CssClass="tlet ssC" />
               <asp:BoundField DataField="D" ReadOnly="false" ItemStyle-CssClass="tlet ssD" />
               <asp:BoundField DataField="E" ReadOnly="false" ItemStyle-CssClass="tlet ssE" />
          ...etc
          </Columns>
      </asp:GridView>
         if (letchg == 0)
            {
                for (int i = 1; i < rep; i++)
                {
                    var columnMove = grid.Columns[1];
                    grid.Columns.RemoveAt(1);
                    grid.Columns.Insert((26), columnMove);
                }
            }
            if (letchg == 2)
            {
                for (int i = 1; i < rep; i++)
                {
                    var columnMove = grid.Columns[1];
                    grid.Columns.RemoveAt(1);
                    grid.Columns.Insert((26), columnMove);
                }
            }
            if (letchg == -2)
            {
                for (int i = 1; i < rep; i++)
                {
                    var columnMove = grid.Columns[1];
                    grid.Columns.RemoveAt(1);
                    grid.Columns.Insert((26), columnMove);
                }
            }
        }
if(letchg==0)
{
对于(int i=1;i
启动与在表之间切换有不同的条件,因为一旦我将列从ABCD…WXYZ重新排序到CDEF…YZAB,它就会保持这种状态。所以如果我想转到DEFG…ZABC,我只移动一列,因为它是相对的。最大的问题是,如果用户点击刷新按钮(创建回发),它将重新发送最后一个操作,从而破坏整个订单


在进行重新排序之前,是否可以每次将表的列顺序重置为ABCD…WXYZ?这样就不是相对的重新排序了?或者有更好的方法吗?

您需要动态添加列。对于此用途,请参见下面的代码

  // grid Columns with respect to their data fields
        Dictionary<string, DataControlField> gridColumns = new Dictionary<string, DataControlField>();
        for (int record = 0; record < lettertable.Columns.Count; record++)
        {
            var gridColumn = lettertable.Columns[record];
            if (gridColumn is BoundField)
            {
                var boundField = gridColumn as BoundField;
                gridColumns.Add(boundField.DataField, gridColumn);
            }
        }

        // columns new arrangement
        string columnsOrder = "BAECD";
        for(int count= lettertable.Columns.Count-1; count>-1; count--) 
        {
            // remove existig columns
            lettertable.Columns.RemoveAt(count);
        }

        // add columsn
        foreach (var columnOrder in columnsOrder)
        {
            lettertable.Columns.Add(gridColumns[columnOrder.ToString()]);
        }

        // Bind grid to show new columns
        lettertable.DataBind();
//网格列与其数据字段相关
Dictionary gridColumns=新字典();
for(int record=0;record-1;count--)
{
//删除现有列
字母表。列。移除(计数);
}
//添加列
foreach(columnsOrder中的变量columnOrder)
{
添加(gridColumns[columnOrder.ToString());
}
//绑定网格以显示新列
letterable.DataBind();

您需要动态添加列。对于此用途,请参见下面的代码

  // grid Columns with respect to their data fields
        Dictionary<string, DataControlField> gridColumns = new Dictionary<string, DataControlField>();
        for (int record = 0; record < lettertable.Columns.Count; record++)
        {
            var gridColumn = lettertable.Columns[record];
            if (gridColumn is BoundField)
            {
                var boundField = gridColumn as BoundField;
                gridColumns.Add(boundField.DataField, gridColumn);
            }
        }

        // columns new arrangement
        string columnsOrder = "BAECD";
        for(int count= lettertable.Columns.Count-1; count>-1; count--) 
        {
            // remove existig columns
            lettertable.Columns.RemoveAt(count);
        }

        // add columsn
        foreach (var columnOrder in columnsOrder)
        {
            lettertable.Columns.Add(gridColumns[columnOrder.ToString()]);
        }

        // Bind grid to show new columns
        lettertable.DataBind();
//网格列与其数据字段相关
Dictionary gridColumns=新字典();
for(int record=0;record-1;count--)
{
//删除现有列
字母表。列。移除(计数);
}
//添加列
foreach(columnsOrder中的变量columnOrder)
{
添加(gridColumns[columnOrder.ToString());
}
//绑定网格以显示新列
letterable.DataBind();

if
s如果所有块都完全相同,为什么还要使用
if
s?如果所有块都完全相同,为什么还要使用
if
s?虽然此代码可以回答问题,但提供有关如何和/或为什么解决问题的附加信息将提高答案的长期价值。记住,你是在将来回答读者的问题,而不仅仅是现在提问的人!请编辑您的答案以添加解释,并说明适用的限制和假设。提到为什么这个答案比其他答案更合适也没什么坏处。进一步的重新排列是否会与您在上面创建的新顺序相关?不需要重新排列,新顺序是要向用户界面显示的列的新顺序。效果非常好。非常感谢。对于未来的读者,我只需要对columnsOrder进行一些修改,使其成为一个数组,它就可以工作了。虽然这段代码可能会回答这个问题,但提供关于它如何和/或为什么解决这个问题的额外信息将提高答案的长期价值。记住,你是在将来回答读者的问题,而不仅仅是现在提问的人!请编辑您的答案以添加解释,并说明适用的限制和假设。提到为什么这个答案比其他答案更合适也没什么坏处。进一步的重新排列是否会与您在上面创建的新顺序相关?不需要重新排列,新顺序是要向用户界面显示的列的新顺序。效果非常好。非常感谢。对于未来的读者,我只需要对columnsOrder进行一些修改,使其成为一个数组,它就可以工作了。