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

本文关键字:视图 何过滤 过滤 数据 | 更新日期: 2023-09-27 17:51:21

我知道有根据列值进行筛选的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基于行位置?

谢谢。

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

您可以利用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);
}