You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinForms中DataGridView仅首次填充,后续无法加载问题求助

解决WinForms切换分类后DataGridView无法重新加载数据的问题

核心问题分析

你的代码存在以下几个导致后续加载异常的关键问题:

  • 每次切换子分类时,未清除之前手动添加的列(如Test1、Jugement OK等),导致列重复、数据绑定逻辑混乱
  • 直接调用Rows.Clear()与DataBinding机制冲突,绑定数据源后行操作受数据绑定限制,无法彻底重置状态
  • 未正确重置DataGridView的绑定状态,残留的列配置和行状态干扰后续数据加载

修复方案及代码修改

1. 重置DataGridView状态(在comboBox2_SelectedIndexChanged开头添加)

先彻底清理之前的自定义列和行状态,避免残留配置干扰:

string w = comboBox2.Text;
int t = 0;

// 清除所有手动添加的列(保留DataSet绑定的核心列)
var boundColumns = dataGridView2.Columns.Cast<DataGridViewColumn>()
    .Where(col => col.DataPropertyName != string.Empty && !col.Name.StartsWith("Test") && !col.Name.StartsWith("a"))
    .ToList();
dataGridView2.Columns.Clear();
boundColumns.ForEach(col => dataGridView2.Columns.Add(col));

// 重置绑定列的基础状态
foreach (var col in dataGridView2.Columns)
{
    col.ReadOnly = false;
    col.Visible = false;
}

// 重置所有行的单元格值和可见性
foreach (DataGridViewRow row in dataGridView2.Rows)
{
    row.Visible = true;
    row.Cells["toleranceMinDataGridViewTextBoxColumn"].Value = "";
    row.Cells["toleranceNomDataGridViewTextBoxColumn"].Value = "";
    row.Cells["toleranceMaxDataGridViewTextBoxColumn"].Value = "";
}

2. 修正数据源绑定逻辑

替换原来的数据源重置代码,避免绑定冲突:

// 先解绑数据源,再重新绑定
dataGridView2.DataSource = null;
// 可选:根据当前分类筛选数据(而非绑定整个Tolerance表,提升性能)
// var filteredData = dataSet1.Tolerance.AsEnumerable()
//     .Where(row => row["对应分类字段"].ToString() == comboBox1.Text + comboBox2.Text)
//     .CopyToDataTable();
// dataGridView2.DataSource = filteredData;
dataGridView2.DataSource = this.dataSet1.Tolerance;

3. 修复SQL注入风险(可选但强烈建议)

在comboBox1_SelectedIndexChanged中,将字符串拼接SQL改为参数化查询:

cmd2.CommandText = "SELECT section FROM Type where typee = @Type";
cmd2.Parameters.AddWithValue("@Type", a);

修复效果

修改后,每次切换分类/子分类时,DataGridView会先彻底清理之前的自定义列和状态,再重新绑定数据并生成新的测量列,解决后续加载异常的问题。

内容的提问来源于stack exchange,提问作者LiterallyGutsFromBerserk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 22:08:14