[英]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#
...
//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():
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
上使用帶有Filter的2個視圖,然后只需要將它們指向原始成員表即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.