我有一个数据表。例如:
private DataTable GetGenericDatatable(){
DataTable retval = new DataTable();
retval.Columns.Add("ProtocolNumber");
retval.Columns.Add("Name");
retval.Columns.Add("Company");
retval.Columns.Add("Department");
retval.Columns.Add("VisitDate");
retval.Columns.Add("DispatchTargetName");
retval.Columns.Add("DayOffCount");
// add data ...
return retval;
}
我想在" Department" 和" VisitDate" 列之间插入一些列,即使数据表已满了数据。
我们可以通过创建新的数据表,再次创建列等来实现这一点,但这是一个肮脏的解决方案。有什么想法可以找到明确的解决方案吗?
答案 0 :(得分:1)
添加新的DataColumn
并使用SetOrdinal
方法设置其位置:
var col = retval.Columns.Add("New Column");
col.SetOrdinal(4);
答案 1 :(得分:1)
您可以将DefaultValue
分配给DataColumm
:
DataTable tbl = GetGenericDatatable();
tbl.Columns.Add(new DataColumn("Col1") { DefaultValue="def. value"});
tbl.Columns.Add(new DataColumn("Col2", typeof(DateTime)) { DefaultValue = DateTime.Now });
此值将应用于表格中的每个现有行。
您可以使用SetOrdinal
设置列的索引。例如:
tbl.Columns["Col1"].SetOrdinal(tbl.Columns.IndexOf("VisitDate"));
tbl.Columns["Col2"].SetOrdinal(tbl.Columns.IndexOf("VisitDate"));
现在新列位于Department
之前的VisitDate
和Col1
之间,Col2
。
答案 2 :(得分:1)
您可以使用此扩展程序:
namespace System
{
public static class Extensions
{
public static void AddColumnAfter(this DataColumnCollection columnCollection, string afterWhichColumn, DataColumn column)
{
var columnIndex = columnCollection.IndexOf(afterWhichColumn);
columnCollection.Add(column);
columnCollection[column.ColumnName].SetOrdinal(columnIndex + 1);
}
}
}
示例:
DataTable table = new DataTable();
table.Columns.Add("Column 1");
table.Columns.Add("Column 2");
table.Columns.Add("Column 3");
table.Columns.AddColumnAfter("Column 1", new DataColumn("Column 4"));