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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:58:11