DataView.Count different DataView.Table.Rows.Count
我正在使用C#和.NET 3.5,并且有一个GridView,我可以在代码隐藏页中以编程方式设置dataSource。我在DataTable中有数据,然后根据每行的列值(isValid布尔值),使用DataRowView.AddNew()方法向2个DataView中的1个创建新行-dvValid或dvInvalid。我没有创建新的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#
...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | //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; } |
那第一行排序不正确,那可能是最后一行吗?
我认为您缺少DataView.EndEdit():
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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(); } |
但我也想指出,您可能在