.NET DataSet 过滤演示






2.20/5 (7投票s)
本文档解释了如何在 DataSet/DataTable 中过滤行。提供的示例将帮助您更快地获取信息。
引言
本文档演示了使用 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;
}
关注点
请注意,由于这是一个非常简单且快速制作的应用程序,我没有进行适当的异常处理和对象释放。标准代码始终必须遵循适当的编码标准。
祝您编码愉快。