将行动态添加到DataView的索引中
本文关键字:索引 DataView 动态 添加 | 更新日期: 2023-09-27 18:25:39
在数据视图中插入数据行时,我遇到了一个有趣的问题。我从数据库中收到一组数据。这些信息被分组。此数据集中有三个级别。例如:
Category SaleValue
SubCategory1 SaleValue
SubCategory2 SaleValue
SubCategory2 SaleValue
SubCategory1 SaleValue
SubCategory1 SaleValue
Category SaleValue
...
我已经为分组分配了整数值。Category=0,SubCategory1=1,SubCategory2=2。这将返回一个包含所有正确信息的良好DataView。
我的问题在于如何在特定索引中插入新数据。报告还有一个级别的数据。我检索到最后一个级别的数据。这包括每个级别的产品。例如(以上述示例为基础)。
Category SaleValue
SubCategory1 SaleValue
SubCategory2 SaleValue
Product SaleValue
Product SaleValue
SubCategory2 SaleValue
Product SaleValue
SubCategory1 SaleValue
SubCategory1 SaleValue
Category SaleValue
...
我需要将这些数据加入适当的部分。然而,我觉得当我用当前代码插入时,插入的代码会把DataView索引抛出。如果我完全错过了什么,请原谅我。我是DataViews的新手。
private DataView AddProducts(DataView data)
{
int position = 0;
for (int i = position; i < data.Count; i++)
{
DataRowView currentRow = data[i];
if (current.Row.Field<int>("group") == 2)
{
var productData = //DB call for data
foreach (DataRowView row in productData)
{
position = i+1; //Dont want to insert at the row, but after.
DataRow newRow = data.Table.NewRow();
newRow[0] = row["ProductName"];
newRow[1] = row["Sale"];
data.Table.Rows.InsertAt(newRow, position);
// i is now position. This will allow another insert to insert on the
// next row, or for the loop to start at the row after this inserted
// row.
i = position;
}
}
}
return data;
}
我好像错过了什么。也许是因为我将循环的上限设置为原始数据。计数数字?插入会打乱索引吗?因为当我检查比插入位置更高的索引时,插入的数据似乎是重复的,或者没有插入正确的索引。
使用ObservableCollection和CollectionViewSource可能更容易
使用ObservableCollection.Add(项),然后刷新CollectionViewSource,如果排序和分组设置正确,CollectionViewSource将自动对数据进行排序和分组。