首页 > 后端开发 > C++ > 如何有效过滤通过DataMember绑定到DataSet的DataGridView?

如何有效过滤通过DataMember绑定到DataSet的DataGridView?

Linda Hamilton
发布: 2025-01-25 10:01:10
原创
892 人浏览过

How to Effectively Filter a DataGridView Bound to a DataSet via DataMember?

DataGridView 数据操作:高效过滤方法

在不修改 DataGridView 底层数据源的情况下过滤 DataGridView 中显示的数据,有多种方法可供选择,具体方法取决于数据源类型。虽然直接过滤 DataTable 通过其默认视图非常简单,但通过 DataMember 绑定到 DataSet 的 DataTable 的过滤则更具挑战性。

场景一:直接过滤 DataTable

当 DataGridView 的 DataSource 直接设置为 DataTable 时,可以通过修改 DataTable 的 DefaultView.RowFilter 属性来实现过滤。此方法有效是因为 DataTable 直接绑定到 DataGridView,允许直接操作其数据。

场景二:过滤绑定到 BindingSource 的 DataTable

如果 DataGridView 的 DataSource 是一个 BindingSource,并且 BindingSource 的 DataSource 是 DataTable,则可以通过修改 BindingSource.Filter 属性来执行过滤。此方法有效是因为 BindingSource 充当 DataTable 和 DataGridView 之间的中间体,允许在不修改 DataTable 本身的情况下进行过滤。

场景三:通过 DataMember 将 DataTable 绑定到 DataSet

当 DataGridView 的 DataSource 是一个 DataSet,并且 DataMember 设置为 DataTable 名称时,过滤变得更加复杂。关键区别在于 DataGridView 不是直接绑定到 DataTable,而是绑定到 DataSet 中的 DataTable。

场景三中过滤失败的原因

在这种情况下,尝试过滤 ds.Tables[0].DefaultView.RowFilter 不会更新 DataGridView,因为 DataGridView 没有直接绑定到 DataTable。它绑定到 DataSet 和 DataMember。修改 DataTable 的 DefaultView 不会反映在 DataGridView 中,因为 DataGridView 没有意识到更改。

解决方案:过滤 DataView 并将其绑定到 DataGridView

为了解决这个问题,基于 DataTable 创建一个 DataView,将过滤器应用于 DataView,并将 DataGridView 的 DataSource 设置为 DataView。这种方法保留了原始 DataSet,并允许在不更改 DataGridView 的 DataSource 的情况下进行过滤。

代码示例

<code class="language-csharp">private void textBox1_TextChanged(object sender, EventArgs e)
{
    DataView dv = ds.Tables[0].DefaultView;
    dv.RowFilter = string.Format("Field = '{0}'", textBoxFilter.Text);
    dataGridViewFields.DataSource = dv;
}</code>
登录后复制

以上是如何有效过滤通过DataMember绑定到DataSet的DataGridView?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板