我使用的是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#
..。
//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;
}发布于 2009-10-19 22:18:30
这1行排序不正确,会不会是最后一行?
我想你遗漏了一个DataView.EndEdit():
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表。
https://stackoverflow.com/questions/1591309
复制相似问题