修改BindingSource的DataMember后,DataGridView无法加载新表数据
解决DataGridView切换数据表无数据的问题
先排查表名匹配问题
- 确认ListBox选中的表名和
wCAsystemdbDataSet里的实际表名完全一致(包括大小写、空格、特殊符号),可以通过调试查看wCAsystemdbDataSet.Tables集合里的表名来核对。 - 把
lstTables.Text换成lstTables.SelectedItem.ToString(),避免ListBox的Text属性可能出现的显示值与实际选中值不符的情况。
确保目标表已加载数据
切换的表必须已经填充了数据,比如调用对应TableAdapter的Fill方法:
// 示例:假设目标表的TableAdapter是UserTableAdapter userTableAdapter.Fill(wCAsystemdbDataSet.User);
如果是手动添加到ListBox的表名,要确认这些表确实存在于数据集中且已完成数据填充。
修改代码并强制刷新绑定
调整事件代码,增加绑定刷新逻辑:
private void lstTables_SelectedIndexChanged(object sender, EventArgs e) { var selectedTableName = lstTables.SelectedItem?.ToString(); if (string.IsNullOrEmpty(selectedTableName)) return; wCAsystemdbDataSetBindingSource.DataMember = selectedTableName; // 重置BindingSource的绑定状态 wCAsystemdbDataSetBindingSource.ResetBindings(false); // 让DataGridView自动生成新表的列(如果之前是手动列,可根据需求调整) dataGridView1.AutoGenerateColumns = true; // 重新绑定数据源确保生效 dataGridView1.DataSource = wCAsystemdbDataSetBindingSource; }
额外注意事项
- 如果DataGridView是手动添加的固定列,切换表后需要手动调整列的
DataPropertyName来匹配新表字段,或者开启AutoGenerateColumns让控件自动适配新表结构。 - 调试时可以查看
wCAsystemdbDataSetBindingSource.Count,如果为0说明目标表没有数据;如果列还是原表的,说明DataMember设置的表名不正确。
内容的提问来源于stack exchange,提问作者Arkose
相关产品推荐
相关产品推荐

