首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#网格视图列顺序重置

问C#网格视图列顺序重置
EN

Stack Overflow用户
提问于 2017-06-27 08:57:36
回答 1查看 218关注 0票数 1

我正在尝试根据用户对web应用程序的需求对网格视图列进行动态重新排序。

例如,默认表以列A、B、C、D开始...W X Y Z。

用户调出另一个表,但它的顺序必须是C D E F...Y Z A B

我目前的实现如下:

代码语言:javascript
复制
       <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>

代码隐藏涉及一组相当广泛的条件集(用于解释启动和非启动,以及相同的记录集和不同的记录集),如下所示:

代码语言:javascript
复制
         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?这样就不是相对的重新排序了吗?或者有更好的方法来做这件事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-27 13:10:09

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

代码语言:javascript
复制
  // 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();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44770818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档