[英]How can I delete and rewrite rows in a datatable and write them back from a datarow[] array in a different order?
我尝试将数据表行保存到datarow []数组中,然后删除数据表行,然后以不同顺序将它们从datarow []数组重写为数据表。 但是,当我从数据表中删除它们时,无法从datarow []数组中访问它们。
我不知道我是否在正确执行此操作,或者我是否完全偏离了常规,但我迫切需要帮助。
这就是我想要做的:
我有一个8行的数据表。 我希望能够以某种方式循环遍历8行并根据某些条件对它们重新排序。
例如,我的行具有一个发票编号,行号和零件号作为关键字段。 根据条件,我可能需要第6,7,8行作为第1,2,3行开始,然后将其余部分向下移动。
如果有人有想法,请回答....这是一个紧急问题。
谢谢,
山姆
使用DataView可以查看行,因为可以像这样对行进行排序。
dataTable.DefaultView.Sort = "columnNameA, columnNameB desc";
然后,无论您使用什么列表,都将其绑定到DataView。
哦,这是有关Sort属性的一些文档。
如果您使用DataRow:
var dr = table.Rows[0];
然后从表格中删除该行, dr
也将被删除。 在同一行。 那解释了你的问题。
至于解决方案,请不要对DataTable中的行重新排序。 而是添加另一个名为RowOrder
列,对其进行修改以更改顺序,然后根据该列对DataTable进行排序,如@ mperrenoud03所示:
table.DefaultView.Sort =“ RowOrder”;
并使用默认视图。
您可以尝试使用以下方法:
DataTable table = new DataTable();
table.Columns.Add("Invoice", typeof(string));
table.Columns.Add("Line", typeof(int));
table.Columns.Add("Part", typeof(string));
for (int i = 1; i <= 9; i++)
table.Rows.Add("Invoice " + i, i, "Part " + i);
//reorder them:
int[] orders = { 6, 7, 8, 1, 2, 3, 4, 5 };
DataTable table2 = table.Clone();
DataRow row;
for (int i = 0; i < orders.Length; i++)
{
row = table2.NewRow();
row["Invoice"] = table.Rows[orders[i]]["Invoice"];
row["Line"] = table.Rows[orders[i]]["Line"];
row["Part"] = table.Rows[orders[i]]["Part"];
table2.Rows.Add(row);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.