使用DataTable.Merge()合并后主表列丢失问题求助
解决DataTable合并后DataGridView列显示不全的问题
嘿,我来帮你搞定这个问题!你当前代码的核心问题是绑定数据源时选错了DataTable,导致只显示mag的两列。咱们一步步来修正:
问题原因分析
你执行了kom.Merge(mag),这个方法是把mag的数据合并到kom里(kom是目标表,mag是源表),合并后的kom会包含你需要的所有四列:PPID、NAZIV、MOBILNI、POSLEDNJI_PUT_PROPAGIRAN。但你最后把mag绑定到了DataGridView,而mag本身只有两列,所以自然只显示这两列。
另外,你的代码里手动调用con.Close()是多余的——using语句会自动管理连接的关闭和资源释放,不需要手动处理。
修改后的完整代码
public void UcitajTargete() { DataTable kom = new DataTable(); DataTable mag = new DataTable(); // 加载kom表数据 using (FbConnection con = new FbConnection(M.Baza.connectionKomercijalno2018)) { con.Open(); using (FbDataAdapter da = new FbDataAdapter("SELECT PPID, NAZIV, MOBILNI FROM PARTNER ORDER BY NAZIV", con)) { da.Fill(kom); } } // 加载mag表数据 using (FbConnection con = new FbConnection(M.Baza.connectionString)) { con.Open(); using (FbDataAdapter da = new FbDataAdapter("SELECT PPID, POSLEDNJI_PUT_PROPAGIRAN FROM PARTNER WHERE(POSLEDNJI_PUT_PROPAGIRAN >= 0)", con)) { da.Fill(mag); } } // 设置主键,确保合并时正确匹配行 kom.PrimaryKey = new DataColumn[] { kom.Columns["PPID"] }; mag.PrimaryKey = new DataColumn[] { mag.Columns["PPID"] }; // 将mag的数据合并到kom中 kom.Merge(mag); // 绑定合并后的kom表到DataGridView dataGridView1.DataSource = kom; }
关键修改点
- 数据源切换:把
dataGridView1.DataSource = mag;改成dataGridView1.DataSource = kom;,这样就能显示合并后的所有四列。 - 移除冗余代码:删掉手动的
con.Close(),让using语句自动管理连接生命周期,更安全简洁。 - 主键确保匹配:你已经正确设置了两个表的主键为
PPID,这能保证Merge操作时,mag中的POSLEDNJI_PUT_PROPAGIRAN值会准确对应到kom中相同PPID的行里。
这样修改后,你的DataGridView就能显示所有需要的列啦!
内容的提问来源于stack exchange,提问作者Aleksa Ristic
相关产品推荐
相关产品推荐

