我正在使用 C# 和 .NET 3.5 并有一个 GridView,我在代码隐藏页面中以编程方式设置数据源。我在 DataTable 中有数据,然后根据每行的列值(isValid boolean),我使用 DataRowView.AddNew() 方法在 2 个 DataView 中的 1 个中创建一个新行 - dvValid 或 dvInvalid。我没有创建一个新的 DataTable.NewRow 来添加到 DataView 表中。然后我将 GridView 绑定到适当的 dataView。
对 GridView 进行排序时出现问题。我有 1 行没有正确排序的问题,所有其他行都排序正常。我调试了我的代码,发现 DataView.Count 比 DataView.Table.Rows.Count 多 1,即使我正在调用 DataView.Table.AcceptChanges() 方法。这很奇怪,因为 dataTable 应该包含所有已提交的行,因此计数应该相同。
那么为什么这2个计数不同呢?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;
}