C# 在DataGridView中显示SQL中的表

C# 在DataGridView中显示SQL中的表,c#,C#,我创建了一个名为charityah的数据库,其中包含5个表。他们的名字列在一个组合框中 当我选择其中一个时,我希望在DataGridView中显示它们的内容 我尝试的是:首先,我将DataGridView链接到此数据库,并尝试了我发现的以下代码: SqlConnection connection = new SqlConnection(); private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) {

我创建了一个名为charityah的数据库,其中包含5个表。他们的名字列在一个组合框中

当我选择其中一个时,我希望在DataGridView中显示它们的内容

我尝试的是:首先,我将DataGridView链接到此数据库,并尝试了我发现的以下代码:

SqlConnection connection = new SqlConnection();

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    string s = comboBox1.Text;

    connection.ConnectionString = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\Downloads\charityah.mdf;Integrated Security=True";

    using (connection)
    {
        connection.Open();
        SqlDataAdapter adapter = new SqlDataAdapter("select * from "+s, connection);
        DataSet ds = new DataSet();
        adapter.Fill(ds, s);
        dataGridView1.DataSource = ds.Tables[0];
        dataGridView1.Refresh();   
    }
}
这个方法不会给我任何错误,它会找到表,但在DataGridView中什么也看不到

因为您报告(注释)有行,所以听起来主要问题(连接处理除外)是数据绑定问题。我突然想到几点:

  • 表是否处于虚拟模式
  • 是添加列吗
  • 列是否已经存在
您可能希望尝试添加:

dataGridView1.VirtualMode = false;
dataGridView1.Columns.Clear();
dataGridView1.AutoGenerateColumns = true;
在会议之前:

dataGridView1.DataSource = ds.Tables[0];
您可能还需要检查
dataGridView1.DataMember
是否未分配值。

由于您报告(注释)有行,所以听起来主要问题(连接处理除外)是数据绑定问题。我突然想到几点:

  • 表是否处于虚拟模式
  • 是添加列吗
  • 列是否已经存在
您可能希望尝试添加:

dataGridView1.VirtualMode = false;
dataGridView1.Columns.Clear();
dataGridView1.AutoGenerateColumns = true;
在会议之前:

dataGridView1.DataSource = ds.Tables[0];

您可能还需要检查
dataGridView1.DataMember
是否未分配值。

试试这个,有时无意义的项目确实会造成很多混乱。因此,请尝试将“自动生成列”设置为true。愿这一切开始向你展示结果。因为根据你的评论,似乎还有其他问题。那就试试吧
dataGridView1.AutoGenerateColumns=true

试试这个,有时候无意义的东西确实会造成很多混乱。因此,请尝试将“自动生成列”设置为true。愿这一切开始向你展示结果。因为根据你的评论,似乎还有其他问题。那就试试吧
dataGridView1.AutoGenerateColumns=true

ds.Tables[0].Rows.Count在
Fill(ds,s)
之后报告了什么?另外:我想知道这其中有多少与您(在事件处理程序中)处理一个存在时间更长的对象(作为字段)有关。您有一个
连接
实例,每次使用它时都可以
Dispose()
(通过
使用
)。。。保证第二次不起作用。。。(就我个人而言,我会通过删除该字段并将
new Connection()
移动到方法中来解决这个问题,即
使用(var Connection=new SqlConnection(cs)){…}
ds.Tables[0].Rows.Count给了我存在的行数..我不明白你说的最后一句话,但我把SqlConnection=new SqlConnection();在methode内部,我使用而不是使用(connection)connection.open()和connection.close()你只需要处理一次,一旦处理完毕,它就是toast。通过在字段上使用
use
,你就注定了
连接处的对象在第一次通过该事件处理程序后将毫无用处。你可以多次打开/关闭对象,但处理是非常致命的。什么是
ds.Tables[0].Rows.Count
填充(ds,s)
后报告?另外:我想知道这其中有多少与您(在事件处理程序中)处理一个存在时间长于此值的对象(作为字段)有关。您有一个
连接
实例,您可以
处理它()
(通过
使用
)每次使用它时…保证第二次不起作用…(我个人会通过删除该字段并将
new Connection()
移动到方法中来解决这个问题,即
使用(var Connection=new SqlConnection(cs)){…}
ds.Tables[0].Rows.Count给了我存在的行数..我不明白你说的最后一句话,但我将SqlConnection connection=new SqlConnection();放在methode中,我使用而不是使用(connection)connection.open()和connection.close()你只需要处理一次东西;一旦你处理完,它就是toast。通过在一个字段上使用
use
,你就注定了
connection
上的对象在第一次通过该事件处理程序之后就没用了。你可以多次打开/关闭东西,但处理是非常致命的。太多了:D这个问题让我头疼:这个问题让我头疼