首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataView.Count不同的DataView.Table.Rows.Count

DataView.Count不同的DataView.Table.Rows.Count
EN

Stack Overflow用户
提问于 2009-10-20 05:39:12
回答 1查看 7.3K关注 0票数 1

我使用的是C#和.NET 3.5,并且有一个GridView,我正在代码隐藏页面中以编程方式设置dataSource。我将数据放在DataTable中,然后根据每个行的列值(isValid布尔值),使用DataRowView.AddNew()方法在2个DataViews - dvValid或dvInvalid中的1个中创建新行。我不是要创建一个新的DataTable.NewRow来添加到DataView表中。然后,我将GridView绑定到适当的dataView。

在对GridView进行排序时出现问题。我遇到了1行排序不正确的问题,所有其他行都排序正常。我调试了我的代码,发现即使我在调用DataView.Table.AcceptChanges()方法,DataView.Count也比DataView.Table.Rows.Count多1。这很奇怪,因为dataTable应该有所有提交的行,因此计数应该是相同的。

那么为什么这两个计数是不同的呢?DataView是DataTable的子集,因此它的行数不应等于或少于DataTable。填充DataView时,是否应该先创建DataTables,而不是直接创建DataView?现在,我在没有dDataTableRow的情况下直接创建DataRowView,这是正确的方法吗?

谢谢你的帮助。

代码片段: C#

..。

代码语言:javascript
复制
//get the data as DataTable
members = GetMemberDataTable ();

//create views from a new DataTable with no rows
dvValidMembers = new DataView (CreateMembersDT("ValidMembers"));
dvInValidMembers = new DataView (CreateMembersDT("InvalidMembers"));

//iterate thru each row and put into appropriate DataView
foreach (DataRow memberRow in members.Rows)
            {
                if ((bool)memberRow["isValid"])
                    //Add to valid members Dview
                    member = dvValidMembers.AddNew();
                else
                    //add to InValid members Dview
                    member = dvInvalidMembers.AddNew();

                member["memberID"] = memberRow["memID"];

            } //foreach

    dvInvalidMembers.Table.AcceptChanges();
    dvValidMembers.Table.AcceptChanges();

 }

 private System.Data.DataTable CreateMembersDT ( string tableName)
    {
        System.Data.DataTable dtMembers = new System.Data.DataTable(tableName);

        dtMembers.Columns.Add(new DataColumn("memID", typeof(int)));

        return dtMembers;
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-10-19 22:18:30

这1行排序不正确,会不会是最后一行?

我想你遗漏了一个DataView.EndEdit():

代码语言:javascript
复制
foreach (DataRow memberRow in members.Rows)
{
    DataView dv;
    if (...) 
        //Add to valid members Dview
        dv = dvValidMembers;
    else
        dv = dvInvalidMembers;

    member = dv.Addnew();
    member["memberID"] = memberRow["memID"];
    dv.EndEdit();
}

但我还想指出的是,您可能会在isValid上使用2个带有过滤器的视图,然后您只需将它们指向原始的members表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1591309

复制
相关文章

相似问题

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