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

C#中DataGridView设置DataSource后不显示数据求助

解决DataGridView绑定后不显示数据的问题

嘿,我看了你的代码,调试能拿到数据但界面没展示,问题主要出在数据源绑定方式和TableMapping的使用细节上,咱们一步步来调整:

核心问题分析

你用了DataTableMapping把查询返回的DimCustomer表映射成了mapCustomer,但后续绑定数据源时用了ds.DefaultViewManager,而且还手动设置了ColumnCount = 0,这两个操作干扰了DataGridView的自动列生成和数据绑定逻辑。

具体解决步骤

  • 简化数据源绑定,直接指向映射后的表
    因为你添加了TableMapping,DataSet里实际存储的表名是mapCustomer,不是原始的DimCustomer。所以应该直接绑定到这个具体的DataTable,而不是DefaultViewManager:

    dataGridView1.DataSource = ds.Tables["mapCustomer"];
    

    如果你不需要TableMapping功能,完全可以去掉这部分代码,直接用adapter.Fill(ds, "DimCustomer"),然后绑定ds.Tables["DimCustomer"],这样更直观。

  • 移除dataGridView1.ColumnCount = 0;
    这行代码会清空DataGridView的列集合,即使数据源有数据,也会因为没有列而无法展示。DataGridView默认会根据数据源自动生成列,除非你手动定义了列,否则这行完全没必要。

  • 确认AutoGenerateColumns属性为true
    检查你的DataGridView控件属性,确保AutoGenerateColumns是true(默认值就是true,但以防你不小心修改过)。如果设为false,需要手动添加对应列,或者改回true让控件自动生成。

  • 用using语句管理数据库连接
    原来的代码没有手动释放SqlConnection,容易造成连接泄漏。用using语句可以自动释放资源,更规范:

    using (SqlConnection conn = new SqlConnection(ConnectionString))
    {
        conn.Open();
        // 后续的adapter、DataSet操作放在这里面
    }
    

修改后的完整示例代码

private void ShowGridData() { 
    string ConnectionString = "Integrated Security=SSPI;" + "database=AdventureWorksDW2012;" + "server=DESKTOP-L9L3SMT\\SQL2K12;"; 
    
    // 使用using自动释放连接资源
    using (SqlConnection conn = new SqlConnection(ConnectionString))
    {
        conn.Open(); 

        // 如果你不需要TableMapping,可以直接注释掉下面两行
        DataTableMapping myMapping = new DataTableMapping("DimCustomer", "mapCustomer"); 
        SqlDataAdapter adapter = new SqlDataAdapter("Select * FROM DimCustomer where LastName='yang' and BirthDate='1966-04-08'", conn); 
        adapter.TableMappings.Add(myMapping); 

        DataSet ds = new DataSet(); 
        adapter.Fill(ds, "DimCustomer"); 

        // 确保自动生成列,绑定到映射后的表
        dataGridView1.AutoGenerateColumns = true;
        dataGridView1.DataSource = ds.Tables["mapCustomer"]; 
    }
}

额外验证小技巧

可以在adapter.Fill之后加一行代码,确认映射后的表确实有数据:

Console.WriteLine($"查询到{ds.Tables["mapCustomer"].Rows.Count}条数据");

这样能进一步排除数据是否真的被正确填充到DataSet里。

内容的提问来源于stack exchange,提问作者Nasir Saeed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:29:01