移动RenderTable列
我有一个renderTable,我正在向表中添加行和列,如下所示 –
RenderTable renderTable = new RenderTable(); DataTable dt = GetData(); foreach (DataRow row in dt.Rows) { var header = renderTable.Rows[renderTable.Rows.Count]; header[0].Text = "Column 1"; header[1].Text = "Column 2"; header[2].Text = "Column 3"; header[1].Text = "Column 4"; var data = renderTable.Rows[renderTable.Rows.Count]; data [0].Text = row["col1"].ToString(); // 10 data [1].Text = row["col2"].ToString(); // 11 data [2].Text = row["col3"].ToString(); // 12 data [3].Text = row["col4"].ToString(); // 13 }
这工作正常,表格呈现为以下 –
Column 1 Column2 Column3 Column4 10 11 12 13
我的要求是,现在我想将第4列移动到第二个位置,如下所示。 (这个地方因条件而异)
Column 1 Column4 Column2 Column3 10 13 11 12
我尝试了Insert方法,但它不适合我,因为插入索引可能会改变。 是否有任何渲染表函数将列移动到指定的索引。
如果有的话,请提出任何其他建
我们遗憾地提到但是由于C1PrintDocument的Cols是ReadOnly,因此没有任何函数可以允许将RenderTable列移动到指定的索引。
我是通过从System.Web.UI.WebControls.GridView创建一个新类来完成的。 我重写CreateColumns,它用于按顺序返回列对象的数组。 我从页面读取了一个cookie(这允许我通过页面上的cookie更改列)并根据cookie创建一个新的列数组。 这个cookie只是一个字符串的字符串,所需的顺序为|
分隔器。 我有另一个列选择器页面,可以设置这个cookie。 如果您不需要使用cookie更改列,则不需要 – 您可以从数据库或配置文件中读取/创建此字符串。 我相信代码已经很好地评论和清楚 – 一个注意,我们的应用程序需要包含隐藏列,所以我在返回数组之前将它们添加到列列表的末尾。
using System.Collections; using System.Linq; using System.Web.UI.WebControls; public class ChangeColumnGridView : System.Web.UI.WebControls.GridView { protected override ICollection CreateColumns(PagedDataSource dataSource, bool useDataSource) { // Get the needful from the base class var baseColList = base.CreateColumns(dataSource, useDataSource); var inColList = baseColList.OfType