【发布时间】:2016-07-27 22:26:18
【问题描述】:
是否可以更改 DataTable 中的行顺序,例如当前索引为 5 的行移动到索引为 3 的位置等?
我有这个遗留的、凌乱的代码,下拉菜单从 DataTable 中获取它的值,它从数据库中获取它的值。不可能在数据库中进行更改,因为它有太多的列和条目。我最初的想法是在 db 中添加新列并按其值排序,但这将很难。
因此,由于这只是向用户展示的问题,我想只是切换该 DataTable 中的行顺序。有人知道在 C# 中执行此操作的最佳方法吗?
这是我当前的代码:
DataTable result = flokkurDao.GetMCCHABAKflokka("MSCODE");
foreach (DataRow row in result.Rows)
{
m_cboReasonCode.Properties.Items.Add(row["FLOKKUR"].ToString().Trim() + " - " + row["SKYRING"]);
}
例如,我想将行 2011 - Credit 之前发布到 DataTable 的顶部。
解决方案:
对于那些在 DataTable 中对行进行排序以及使用不支持 Linq 的过时技术时可能遇到问题的人,这可能会有所帮助:
DataRow firstSelectedRow = result.Rows[6];
DataRow firstNewRow = result.NewRow();
firstNewRow.ItemArray = firstSelectedRow.ItemArray; // copy data
result.Rows.Remove(firstSelectedRow);
result.Rows.InsertAt(firstNewRow, 0);
您必须克隆行,将其删除并使用新索引再次插入。此代码将索引为 6 的行移动到 DataTable 中的第一位。
【问题讨论】:
-
你真的想要随机顺序吗?如果是这样,随机只有一次还是总是不同?既然您想添加一列,是否有您想要用于订购的业务逻辑?
-
@TimSchmelter 嗨,蒂姆,只随机一次。我想一直这样。只是用户希望在该下拉列表的顶部有一些条目。 (用户将是用户)我附上了图片,对我要完成的工作进行了更多解释。
-
@nemo_87 关于您的解决方案:如果要将数据表持久化回数据库,请小心。即使您认为除了订单之外没有更改任何内容,数据适配器也会创建删除和插入查询,如果您有外键约束,这可能会很危险。