C#如何隐藏DataGridView中列索引0包含指定字符串的整行数据
解决方案
你可以通过以下两种方式实现需求,优先推荐数据源层面过滤的方案:
方案1:数据源层面过滤(推荐)
直接在绑定的DataTable上设置行过滤规则,不需要遍历控件行,性能更稳定,适合任意数据量的场景:
DataSet dataSet = new DataSet(); dataSet.ReadXml(dialog.FileName); DataTable sourceTable = dataSet.Tables[0]; // 仅展示Visible列值为True的行 sourceTable.DefaultView.RowFilter = "Visible = True"; dataGridView1.DataSource = sourceTable;
如果后续需要取消隐藏,只需将过滤规则清空即可:
sourceTable.DefaultView.RowFilter = "";
方案2:修复原有遍历行写法
如果你需要保留原有遍历逻辑,需要补充空值判断、新行跳过逻辑,同时建议用列名代替固定索引避免列顺序变更导致报错:
DataSet dataSet = new DataSet(); dataSet.ReadXml(dialog.FileName); dataGridView1.DataSource = dataSet.Tables[0]; // 确保数据绑定完成后再执行行隐藏逻辑 dataGridView1.DataBindingComplete += (sender, e) => { // 先校验目标列是否存在,避免运行时报错 if (!dataGridView1.Columns.Contains("Visible")) return; foreach (DataGridViewRow dr in dataGridView1.Rows) { // 跳过控件自带的新增空白行,同时判空避免空引用异常 if (!dr.IsNewRow && dr.Cells["Visible"].Value != null && dr.Cells["Visible"].Value.ToString() == "False") { dr.Visible = false; } } };
内容的提问来源于stack exchange,提问作者Kevin Gichia
相关产品推荐
相关产品推荐

