如何将数据视图从第i行过滤到第j行? (C#)

时间:2011-04-22 03:57:07

标签: c# filter position row dataview

我知道有RowFilter选项可根据列值进行过滤。还有一些方法可以选择前N行。但是我如何过滤掉并获取行(我更喜欢将它放到相同的DataView dv),比如说,位置10到位置23?

这是我的要求。我有一个DataView dv,有100行。我有一个包含10个项目的列表框。当我在列表框中选择第一项时,我想要加载前10行数据视图(加载部分在我的程序中,留给我),如果我在列表框中选择第二项,那么我想要row11到row20加载等等。我可以做列表框部分,但是如何根据行号选择数据视图值?

这是我的代码的外观:

            DataSet ds = new DataSet();
            DataTable dt = ds.Tables["words"];
            DataView dv = new DataView(dt);

现在如何根据行位置从dv获取数据视图?

感谢。

1 个答案:

答案 0 :(得分:3)

您可以利用Linq中提供的扩展方法按位置获取行。例如:

// just setting up a table for the sample
DataTable table = new DataTable();
table.Columns.Add("ID", typeof(int));

for (int i = 1; i <= 100; i++)
{
    table.Rows.Add(i);
}

// grabbing rows 11 through 20 using Linq
DataTable filtered = table.AsEnumerable().Skip(10).Take(10).CopyToDataTable();

以上适用于.NET 3.5 +,C#3.0+。对于在旧版本的C#和.NET中有效的东西,你可以用更多的代码手动完成。

// starting by cloning 'table' (see code above)
DataTable filtered = table.Clone();

int skipRows = 10;
int selectRows = 10;

for (int index = skipRows; 
     index < skipRows + selectRows && index < table.Rows.Count; 
     index++)
{
    filtered.Rows.Add(table.Rows[index].ItemArray);
}