C#gridview列顺序重置

时间:2017-06-27 00:57:36

标签: c# asp.net gridview

我正在尝试根据Web应用程序的用户需求动态重新排序gridview列。

例如,假设默认表以A B C D ... W X Y Z列开头。

用户打开另一个表但必须具有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);
                }
            }
        }

启动与表之间切换有不同的条件,因为一旦我将列从ABCD ... WXYZ重新排序到CDEF ... YZAB,它就会保持这种状态。因此,如果我想去DEFG ... ZABC,我只移动一列,因为它是相对的。大问题是,如果用户点击刷新按钮(创建回发),它将重新发送最后一个操作,搞砸了整个订单。

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

1 个答案:

答案 0 :(得分:0)

您需要动态添加列。在代码下方使用。

  // 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();