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

.NET DataSet 过滤演示

2007年7月27日

CPOL

2分钟阅读

viewsIcon

59304

downloadIcon

797

本文档解释了如何在 DataSet/DataTable 中过滤行。提供的示例将帮助您更快地获取信息。

Screenshot - DTFilter.jpg

引言

本文档演示了使用 Select 方法过滤 DataSet/DataTable。本文面向初学者,将帮助他们学习语言基础知识。

背景

这是一个仅供娱乐的程序,我认为它对 .NET 初学者会有所帮助。

使用代码

示例代码仅包含一个 WinForm,它加载一些带有随机数据的行。我添加了一个带有预制过滤表达式ListBox,还有一个 TextBox,可以帮助您输入用户自定义过滤表达式。

有一个 DataTable,我在这个应用程序中使用它作为全局 - 数据表。我将过滤表达式应用于此表。这个 DataTable 是动态创建的。LoadData() 方法用于将随机数据填充到这个 DataTable 中。

DataTable dt = new DataTable();
private void Form1_Load(object sender, EventArgs e)
{
    dt.Columns.Add("A");
    dt.Columns.Add("B");
    LoadData();
}

下面显示了 LoadDate() 方法。请注意 Random() 的用法。相同的方法与“重置数据”按钮相关联。

private void LoadData()
{
    dt.Rows.Clear();
    Random r = new Random();
    for (int i = 0; i < 10; i++)
    {
        DataRow dr = dt.NewRow();
        dr["A"] = r.Next(0, 1000);
        dr["B"] = r.Next(0, 1000);
        dt.Rows.Add(dr);
    }

    dataGridView1.DataSource = dt;
}

接下来是此应用程序中最重要的部分。这是赋予此应用程序“生命”的方法:DoFilter() 方法。您可以将过滤表达式作为字符串传递给此方法,并在附加的 DataGridView 上看到效果。

private void DoFilter(string filter)
{
    DataTable dt1 = dt.Clone();
    try
    {
        foreach (DataRow dr in dt.Select(filter))
    {
        dt1.ImportRow(dr);
    }
        dataGridView1.DataSource = dt1;
    }
    catch
    // Warning: Non-standard! - without proper catching of exception

    {
        MessageBox.Show("Error in filter expression");
    }
}

如果您提供无效的过滤表达式,应用程序将显示“过滤表达式错误”消息。您可能已经注意到上面的代码中的 dt.Select(filter)。如您所知,这是本文的关键,它执行过滤操作。由于 dt.Select() 返回一个 DataRow 数组,我使用一个具有相同结构的临时表 (dt.Clone()) 来导入过滤结果并将其绑定到 DataGridView

通用方法

以下是您项目的通用方法概述。请不要按原样使用此方法,因为我编写此函数/方法是作为编写本文的一部分,并且未经正确测试。

private DataTable DoDataTableFilter(DataTable dt, string filter)
{
    DataTable dt1 = dt.Clone();
    foreach (DataRow dr in dt.Select(filter))
    {
        dt1.ImportRow(dr);
    }
    return dt1;
}

关注点

请注意,由于这是一个非常简单且快速制作的应用程序,我没有进行适当的异常处理和对象释放。标准代码始终必须遵循适当的编码标准。

祝您编码愉快。

© . All rights reserved.