您可以使用DataColumn.SetOrdinal()方法来实现此目的.
DataSet ds = new DataSet(); ds.Tables.Add(new DataTable()); ds.Tables[0].Columns.Add("column_1", typeof(string)); ds.Tables[0].Columns.Add("column_2", typeof(int)); ds.Tables[0].Columns.Add("column_4", typeof(string)); ds.Tables[0].Columns.Add("column_3", typeof(string)); //set column 3 to be before column 4 ds.Tables[0].Columns[3].SetOrdinal(2);
我使用你的建议为DataSet的DataColumnCollection创建一个扩展方法:
public static void InsertAfter(this DataColumnCollection columns, DataColumn currentColumn, DataColumn newColumn) { if (!columns.Contains(currentColumn.ColumnName)) throw new ArgumentException(/** snip **/); columns.Add(newColumn); //add the new column after the current one columns[newColumn.ColumnName].SetOrdinal(currentColumn.Ordinal + 1); }
我现在可以写:
dt = ds.Tables[0]; dt.Columns.InsertAfter(dt.Columns["column_2"], new DataColumn("column_3"));