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

发布于 2024-11-02 16:33:11 字数 513 浏览 2 评论 0原文

我知道有 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 know there's the RowFilter option to filter according to column value. Also there are methods to choose the top N rows. But how do I filter out and get rows from (I prefer getting it to the same DataView dv), say, position 10 to position 23?

Here's my requirement. I have a DataView dv which has 100 rows. I have a listbox with 10 items. When I choose first item in the listbox, I want first 10 rows of the dataview to be loaded (loading part is in my program, leave it to me), if I choose 2nd item in listbox then I want row11 to row20 to be loaded and so on. I can do the listbox part, but how to choose dataview values based on row number?

This is how my code looks:

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

Now how to have a dataview from dv based on row position?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

时光病人 2024-11-09 16:33:11

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

You can utilize the extension methods provided in Linq to get rows by position. For example:

// 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();

The above works with .NET 3.5+, C# 3.0+. For something that works in older versions of C# and .NET, you can do it manually in just a little more code.

// 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);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文