65.9K
CodeProject 正在变化。 阅读更多。
Home

洗牌DataTable中的DataRow

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2013 年 10 月 11 日

CPOL

2分钟阅读

viewsIcon

9674

我们都知道可以通过简单地使用 DefaultView 来对 DataTable 中的行进行排序。但是,如果我想在表中随机排列一些有条件的行,


我们都知道可以通过简单地使用 DefaultView 来对 DataTable 中的行进行排序。但是,如果我想在表中随机排列一些有条件的行;.net 中没有任何内置的方法。
现在,如果我想选择表中一些符合条件的行,并将它们移动到表的顶部。
让我们通过一个简单的例子来说明,如下所示


//我们创建一个测试数据表及其列

            DataTable dtTestData = new DataTable();
            dtTestData.Columns.Add("id");
            dtTestData.Columns.Add("FirstName");
            dtTestData.Columns.Add("LastName");

//我们向创建的测试 DataTable 添加行


            DataRow drw = dtTestData.NewRow();
            drw["id"] = 1;
            drw["FirstName"] = "Steve";
            drw["LastName"] = "Waugh";
            dtTestData.Rows.Add(drw);

            drw = dtTestData.NewRow();
            drw["id"] = 2;
            drw["FirstName"] = "Mark";
            drw["LastName"] = "Waugh";
            dtTestData.Rows.Add(drw);
            dtTestData.AcceptChanges();

            drw = dtTestData.NewRow();
            drw["id"] = 3;
            drw["FirstName"] = "Jhon";
            drw["LastName"] = "Smith";
            dtTestData.Rows.Add(drw);
            dtTestData.AcceptChanges();

            drw = dtTestData.NewRow();
            drw["id"] = 2;
            drw["FirstName"] = "Shane";
            drw["LastName"] = "Warne";
            dtTestData.Rows.Add(drw);
            dtTestData.AcceptChanges();

//在指定条件下选择一组行(这里我们的条件是 id=3)

            DataRow[] selectedRow = dtTestData.Select("id=3");
                         
            if (selectedRow.Length > 0)
            {
                DataRow drNewRow = dtTestData.NewRow();

//迭代结果 DataRows

                foreach (DataRow rowSelected in selectedRow)
                {

//将结果行的 ItemArray 赋值给 NewRow 的 ItemArray。
                    drNewRow = dtTestData.NewRow();
                    drNewRow.ItemArray = rowSelected.ItemArray;

//从表中删除结果行,并将新行添加到表中。
                    dtTestData.Rows.Remove(rowSelected);
                    dtTestData.Rows.InsertAt(drNewRow, 0);               
                }                              
            } 


 现在,当您查看这个 dtTestData 时;这个 DataTable 将包含顶部的选定的结果行。
这里我们简单地在指定条件下选择特定的行。然后我们为该特定表创建一个新的 DataRow。将结果 datarow 的 itemarray 赋值给 newdatarow 的 item array。然后,在我们从表中删除结果数据行后,将新的数据行添加到表的起始索引(即第 0 个索引)。

以这种方式迭代,可以将所有结果行移动到表的顶部。
类似地,我们可以将任何有条件的结果行移动到 DataTable 的任何行索引。

© . All rights reserved.