我正在尝试根据用户对web应用程序的需求对网格视图列进行动态重新排序。
例如,默认表以列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?这样就不是相对的重新排序了吗?或者有更好的方法来做这件事?
发布于 2017-06-27 13:10:09
您需要动态添加列。对于此用途,请参见以下代码。
// 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();https://stackoverflow.com/questions/44770818
复制相似问题