如何使用comboBox从sql数据库绑定dataGridView中的数据?

时间:2014-08-09 13:39:16

标签: c# winforms datagridview

enter image description here

我的代码面临着独特的问题。 这是显示comboBox1中表格工作正常的代码。

ComboBox充满学校名称,当用户选择该ComboBox中的学校时,该学校的学生将显示在DataGridView中 请帮忙。

  

此应用程序的功能:

     
      
  1. 在sql database(schoolName)中创建表。
  2.   
  3. 选择表格(选择学校)。
  4.   
  5. 在学校添加值(学生信息)。
  6.         

    错误:

         
        
    1. 底部的数据网格没有正确检索,它显示了其他内容。
    2.   
SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath + "\\Login.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");

con.Open();

SqlCommand cmd = new SqlCommand();

cmd.Connection = con;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT * FROM INFORMATION_SCHEMA.TABLES";

SqlDataAdapter dbAdapter = new SqlDataAdapter(cmd);

DataTable dtRecords = new DataTable();
dbAdapter.Fill(dtRecords);
dataGridView1.DataSource = dtRecords; //dataGrid
comboBox1.DataSource = dtRecords;
comboBox1.DisplayMember = "TABLE_NAME";

con.Close();

1 个答案:

答案 0 :(得分:1)

首先检查一下:http://msdn.microsoft.com/en-us/library/ms186224.aspx

SQL查询SELECT * FROM INFORMATION_SCHEMA.TABLES返回有关数据库中存在的表的信息而不是specefic表中的行

如果您想了解该表的信息,可以通过在ComboBox的SelectedIndexChanged事件中编写新查询来丰富该表:

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath + "\\Login.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");

        con.Open();

        SqlCommand cmd = new SqlCommand();

        cmd.Connection = con;
        cmd.CommandType = CommandType.Text;
        cmd.CommandText = "SELECT * FROM " + comboBox1.Text;

        SqlDataAdapter dbAdapter = new SqlDataAdapter(cmd);

        DataTable dtRecords = new DataTable();
        dbAdapter.Fill(dtRecords);
        dataGridView1.DataSource = dtRecords; //dataGrid

        con.Close();
    }

此代码可以解决此问题,但实际上存在一个更大的问题,并且它与您的数据结构有关。

这种代码告诉我每个学校都有一张表,而且不是规范化的数据库。 让我们通过一个例子来清楚:想象一下,你的经理想把一些学生从他们的学校搬到另一所学校,在这个数据结构中你必须将一个记录从一个表移动到另一个表,首先你必须找到指向那个记录的记录。我们的学生然后将其保存在内存中,然后在目标表中创建一个新记录。 在这个例子中:

  • 有很多工作要做(有很多代码要写)
  • 您的数据可能会被破坏。
  • 如果必须在1000名学生中完成,会发生什么?!!

另一方面,您可以简单地创建表并将其命名为schools,其中包含两个主要列:IDName 然后创建一个表,并将其命名为students,其中包含三个主要列:IDSchoolIDName 每个学校都有一个唯一的ID,每个学生都有SchoolID栏中与自己学校相关的自己的ID。