在C#中的两列之间创建一个数据表列

时间:2014-08-26 08:29:54

标签: c# datatable

我有一个数据表。例如:

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" 列之间插入一些列,即使数据表已满了数据。

我们可以通过创建新的数据表,再次创建列等来实现这一点,但这是一个肮脏的解决方案。有什么想法可以找到明确的解决方案吗?

3 个答案:

答案 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之前的VisitDateCol1之间,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"));