首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#从DataView创建DataView

C#从DataView创建DataView
EN

Stack Overflow用户
提问于 2015-08-24 21:36:37
回答 2查看 758关注 0票数 2

我想通过过滤现有的DataView来创建一个新的DataView,但是由于DataView没有.AsEnumerable()方法,并且没有实现IEnumerable{DataRow},所以我遇到了麻烦。

以下是我想要完成的基本任务:

代码语言:javascript
复制
//Some table.
DataTable dt = new DataTable();

//Somewhere in here the table is given columns and rows...

//The first view shows some subset of the table.  
//(This works fine.)
DataView dv1 = dt.AsEnumerable()
    .Where(r => r.Field<int>("ID") < 1000)
    .AsDataView();

//The second view should show a subset of the first view, but I cannot find the methods to do this.
//(This does not compile.)
DataView dv2 = dv1.AsEnumerable()
    .Where(r => r.Field<int>("Salary") > 50000)
    .AsDataView();

到目前为止,我想出的最好的办法是

代码语言:javascript
复制
DataView dv2 = dv1.ToDataTable().AsEnumerable()
   .Where(r => r.Field<int>("Salary") > 50000)
   .AsDataView();

很丑,我猜是低效的。

什么是从视野中观看风景的最佳方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-24 21:41:35

在单独的IEnumerable中创建第一个筛选器,然后使用它创建两个数据视图:

代码语言:javascript
复制
var filtered = dt.AsEnumerable()
                 .Where(r => r.Field<int>("ID") < 1000);


DataView dv1 = filtered.AsDataView();

DataView dv2 = filtered.Where(r => r.Field<string>("Salary") > 50000)
                       .AsDataView();
票数 2
EN

Stack Overflow用户

发布于 2022-08-02 12:24:21

创建第一个DataTable而不是添加列,而不是添加和修改数据。在应用DataViewRowState筛选get第一次DataView之后,比删除更少的重新编码获得第二次DataView:

代码语言:javascript
复制
        DataTable dataTable = new DataTable("dataTable");
        DataColumn dataColumn = new DataColumn("dataColumn");
        dataTable.Columns.Add(dataColumn);
        DataRow dataRow;

        for (int i = 0; i <= 10 - 1; i++)
        {
            dataRow = dataTable.NewRow();
            dataRow["dataColumn"] = "item " + i;
            dataTable.Rows.Add(dataRow);
        }

        dataTable.AcceptChanges();
        DataView dataView = new DataView(dataTable);

        dataView = dataTable.DefaultView;


        dataTable.Rows[1]["dataColumn"] = "Hello";
        dataRow = dataTable.NewRow();
        dataRow["dataColumn"] = "World";
        dataTable.Rows.Add(dataRow);
        dataView.RowStateFilter = DataViewRowState.Added | DataViewRowState.ModifiedCurrent;
        
        DataView dataView1 = dataView.ToTable().DefaultView; //1st View

        dataView.RowStateFilter = DataViewRowState.ModifiedOriginal;
        dataTable.Rows[1].Delete();
        dataTable.Rows[2].Delete();
        dataTable.Rows[3].Delete();
        dataView.RowStateFilter = DataViewRowState.Deleted;

        DataView dataView2 = dataView.ToTable().DefaultView; //2nd View
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32192144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档