簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM