DataGridView刷新后首行重复显示问题求助(附代码)
DataGridView刷新后重复出现标题行的问题排查与修复
问题现象
初始状态下DataGridView首行是列标题(示例:des_placa|cod_caminhao_integracao|cod_caminhao_carregamento),第二行是数据行;调用UpdateForm函数刷新后,出现两行与列标题内容相同的行 + 原有数据行。
核心排查方向
- 数据库数据问题:检查
caminhao表中是否存在一行数据,其字段值恰好等于列名(比如des_placa字段值为"des_placa"),这会导致查询时返回该行,刷新后显示为“重复标题行”。 - 代码逻辑错误:现有代码存在多处无效操作和错误,可能间接引发数据显示异常。
代码中的错误点
- 拼写错误:
Placa.DataBarregamento.DataBindings.Add中的DataBarregamento是笔误,应为Cod_carregamento,会导致绑定失败或异常。 - 无效赋值:
Placa.Text = "des_placa";等三行代码直接将控件文本设为字段名,完全覆盖了数据绑定的作用,属于无意义操作。 - 错误的查询执行:用
cmd.ExecuteNonQuery()执行SELECT查询,该方法仅适用于增删改操作,查询应使用ExecuteReader或DataAdapter.Fill;且这段查询完全多余,因为已将全表数据加载到DataTable中。 - SQL注入风险:直接拼接
comboBox1.Text到SQL语句中,存在严重安全隐患。
修复后的代码
private void UpdateForm() { try { using (SqlConnection conexao = new SqlConnection(connectionString)) { string strsql = "Select des_placa,cod_caminhao_integracao,cod_caminhao_carregamento from caminhao"; SqlDataAdapter da = new SqlDataAdapter(strsql, conexao); DataTable ds = new DataTable(); da.Fill(ds); // 绑定DataGridView dataGridView1.DataSource = ds; // 绑定ComboBox comboBox1.DataSource = ds; comboBox1.DisplayMember = "des_placa"; comboBox1.ValueMember = "des_placa"; comboBox1.AutoCompleteMode = AutoCompleteMode.Suggest; comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems; // 修正绑定逻辑,正确关联控件与字段 Placa.DataBindings.Clear(); cod_integracao.DataBindings.Clear(); Cod_carregamento.DataBindings.Clear(); Placa.DataBindings.Add("Text", ds, "des_placa"); cod_integracao.DataBindings.Add("Text", ds, "cod_caminhao_integracao"); Cod_carregamento.DataBindings.Add("Text", ds, "cod_caminhao_carregamento"); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
额外配置检查
- 确认DataGridView的
AllowUserToAddRows属性设为false(无需用户手动添加行时),避免自动生成空行。 - 若手动配置DataGridView列,确保列的
DataPropertyName与DataTable的字段名完全匹配,避免列绑定错误。
内容的提问来源于stack exchange,提问作者Faustino Da Silva
相关产品推荐
相关产品推荐

