动态地将行添加到DataView的索引

时间:2012-02-23 17:29:18

标签: c# datatable dataview

我有一个有趣的问题,即将数据行插入数据视图。我从数据库中收到一组数据。此信息已分组。此数据集有三个级别。例如:

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;
}

这似乎让我失去了一些东西。也许是因为我将循环的上限设置为原始data.Count数字?插件是否搞乱了索引?因为当我检查比我插入的索引更高的索引时,插入的数据似乎重复或不插入正确的索引。

1 个答案:

答案 0 :(得分:1)

使用ObservableCollection和CollectionViewSource可能更容易 使用ObservableCollection.Add(item)然后刷新CollectionViewSource,如果正确排序和分组设置,它将自动对数据进行排序和分组。