如何在 BindingSource.Filter 之后获取 DataGridView 的可见行数?

Posted

技术标签:

【中文标题】如何在 BindingSource.Filter 之后获取 DataGridView 的可见行数?【英文标题】:How to get visible row count of DataGridView after BindingSource.Filter? 【发布时间】:2009-02-04 00:16:33 【问题描述】:

我有一张桌子,上面有 1640 件物品。我设置了

bindingSource.Filter = "some filter query string";

并且大部分行消失,例如留下 400 行。我希望能够告诉用户“显示 1640 个项目中的 400 个”,因为他们单击了一些文本框,这些文本框更改了过滤器字符串,因此哪些行在 dataGridView 对象中可见(很像 iTunes,但用于医疗数据,而不是流派/艺术家/专辑过滤歌曲)。

我尝试了 bindingSource.Count,无论过滤器字符串设置为什么,它始终为 1640(即使根据需要显示的行数更少)。我尝试遍历 dataGridView.Rows 中的所有行并仅计算可见的行,但总和仍为 1640。

我在哪里可以获得这些信息?

请注意,我没有使用 SQL,但 bindingSource.DataSource 是来自包裹在 DataTable 周围的 DataView 的 DataSource(来自从 XML 读取的数据集)。

【问题讨论】:

我遇到了一个错误,即该代码除了一开始就没有被调用!哎呀!至少有两种方法可以找到计数。看我的回答。 【参考方案1】:

试试这个:datagridviewname.Rows.GetRowCount(DataGridViewElementStates.Visible);

【讨论】:

此解决方案比公认的答案要好得多,因为它不会复制数据表。无需复制表,因此使用的内存最多是只有一个表的两倍。【参考方案2】:

贾里德,

我最近不得不做这件事。对我有用的是在我应用过滤器后使用 DataGridView.Rows.Count 属性。

您是否将数据源设置为 BindingSource 或 DataGridView 的 DataSource 属性?它应该是 BindingSource。

HTH -杰

【讨论】:

【参考方案3】:

我搞砸了其他事情。杰是对的:

dataGridViewCases.Rows.Count

像这样工作:

bindingSource.Count

【讨论】:

【参考方案4】:

您只需要使用 bindingSource 的 Count 属性...

ExampleBindoneSource.Count()

【讨论】:

这是一个很好的答案。通过执行“var bindingSource = (BindingSource)DataGridView1.DataSource;”获取绑定源。并将其放入“DataGridView_DataBindingComplete”事件中。【参考方案5】:

如何将过滤后的项目添加到单独的 DataTable 中并对过滤后的项目进行计数。

【讨论】:

以上是关于如何在 BindingSource.Filter 之后获取 DataGridView 的可见行数?的主要内容,如果未能解决你的问题,请参考以下文章

如何在图像中找到明亮区域(以及如何在图像中找到阴影区域)

在QGIS中如何添加天地图的WMTS

如何在表单提交后保留文本(如何在提交后不删除自身?)

如何在异步任务中调用意图?或者如何在 onPostExecute 中开始新的活动?

在 Avkit 中如何使用这三行代码,以及如何将音乐静音”

如何在 JDBC 中启动事务?