将 DataGridView 直接绑定到 DataSet 失败

Posted

技术标签:

【中文标题】将 DataGridView 直接绑定到 DataSet 失败【英文标题】:Binding a DataGridView to a DataSet directly fails 【发布时间】:2011-05-05 08:31:42 【问题描述】:

此代码绑定的 DataGridView 未按预期显示信息:

dataGridView1.DataSource = ds;

这是 ds 的代码:

public DataSet ConnectandReadList()
        
            DataSet ds = new DataSet();

            string connection_string="Data Source=hermes;database=qcvalues; Integrated Security=SSPI;";            

            using (var myConnection = new SqlConnection(connection_string))
            

                myConnection.Open();
                var command = new SqlCommand(InitializeQuery(), myConnection);
                var adapter = new SqlDataAdapter(command);

                adapter.Fill(ds);
            


            return ds;
        

【问题讨论】:

数据集是数据表的集合。您需要指定要绑定到 DataGridView 的 DataTable。否则,即使只有一个,它也不知道使用哪个 DataTable。 【参考方案1】:

尝试绑定到数据集中的表:dataGridView1.DataSource = ds.Tables[0];

从DataGridView.DataSource 属性的文档中,您还可以绑定到DataSet 并使用DataMember 属性:

当绑定到包含多个列表或表的数据源时,您必须将 DataMember 属性设置为指定要绑定到的列表或表的字符串。

我认为在这种情况下,表名应该是“Table”,因为您没有明确命名它。

【讨论】:

该死!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!你能解释一下为什么我需要这样做吗? 不完全确定,除此之外,我认为 datagridview 不够聪明,无法查看其表的数据集。从来没想过进一步研究它...... +1 或者将 datagridview1.DataMember 设置为表名,但由于您不手动创建它,因此上述操作更容易。 猜猜这也是您想要调试数据源的原因? ;) @Doggett,谢谢,是的,刚刚在文档中看到了关于 DataMember 的内容。将其作为附加信息添加到答案中。【参考方案2】:

ds 是数据集吗?

如果是这样,请尝试将您的 DGV 的 DataMember 设置为 DataSet 中的 DataTable 或为 DataSource 指定您的 DataSet 的 DataTable。

【讨论】:

以上是关于将 DataGridView 直接绑定到 DataSet 失败的主要内容,如果未能解决你的问题,请参考以下文章

C# 绑定Datagridview时显示进度条

如何在已经绑定数据源的datagridview添加一行数据并保存到数据库??

DataGridView只显示数据源中绑定的字段

DataGridView绑定DataTable动态生成列 并且将列名中文显示

使用存储过程 For XML Path 直接读入绑定到 DataGridView 的 DataSet?

DataGridView绑定数据源