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

C# WinForm如何将Npgsql(Postgres)数据绑定到DataGridView指定列?

解决DataGridView二次绑定自动替换预定义列的问题

问题根源在于DataGridView默认开启了AutoGenerateColumns自动生成列功能,每次绑定数据源时,它会根据DataTable的列结构自动创建新列,覆盖你手动定义的预定义列。只需两步即可解决:

1. 关闭自动生成列

在绑定数据源前,强制设置AutoGenerateColumns为false,确保仅使用你预先定义的列:

GVObj.AutoGenerateColumns = false;

2. 优化后的完整代码

同时建议用using语句管理数据库资源,避免连接泄漏;简化列映射的写法,直接使用列名字符串即可:

public static void GetUsers(DataGridView GVObj, DataGridViewColumn User_Name_GVC,
            DataGridViewColumn User_UserName_GVC, DataGridViewColumn User_Password_GVC, 
            DataGridViewColumn User_PhoneNumber_GVC, DataGridViewColumn User_Address_GVC,
            DataGridViewColumn User_RoleID_GVC, DataGridViewColumn User_UserID_GVC)
{
    try
    {
        string SQLqUery = "SELECT * FROM users;";
        // 使用using自动释放命令资源
        using (var CMD = new NpgsqlCommand(SQLqUery, Main.DbConnection))
        {
            // 检查连接状态,避免重复打开
            if (Main.DbConnection.State != System.Data.ConnectionState.Open)
                Main.DbConnection.Open();

            DataTable dt = new DataTable();
            dt.Load(CMD.ExecuteReader());

            // 关键:关闭自动生成列
            GVObj.AutoGenerateColumns = false;

            // 绑定预定义列与数据库列的映射
            User_UserName_GVC.DataPropertyName = "UserName";
            User_Password_GVC.DataPropertyName = "Password";
            User_PhoneNumber_GVC.DataPropertyName = "PhoneNumber";
            User_Address_GVC.DataPropertyName = "Address";
            User_RoleID_GVC.DataPropertyName = "RoleFK";
            User_UserID_GVC.DataPropertyName = "UserId";
            User_Name_GVC.DataPropertyName = "Name";

            GVObj.DataSource = dt;
        }
    }
    catch (Exception ex)
    {
        // 确保异常时关闭连接
        if (Main.DbConnection.State == System.Data.ConnectionState.Open)
            Main.DbConnection.Close();
        MessageBox.Show(ex.Message, "Error");
    }
}

额外提示

  • 无需通过dt.Columns["ColumnName"].ToString()获取列名,直接写数据库列名字符串更简洁高效。
  • using语句会自动处理NpgsqlCommand的资源释放,避免内存泄漏问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 23:20:32