如何通过从组合框中选择任何表来填充DataGridView

时间:2013-03-13 06:41:46

标签: c# .net

我使用以下代码在组合框中显示我的SQL数据库表的名称。

现在我希望当我从组合框中点击任何这些表名时,我的DGV会填充该表的内容。

private void Form1_Load(object sender, EventArgs e)
{
    String strConnection = "Data Source=HP\\SQLEXPRESS;database=MK;Integrated Security=true";

    SqlConnection con = new SqlConnection(strConnection);
    try
    {
        con.Open();

        SqlCommand sqlCmd = new SqlCommand();

        sqlCmd.Connection = con;
        sqlCmd.CommandType = CommandType.Text;
        sqlCmd.CommandText = "Select table_name from information_schema.tables";

        SqlDataAdapter sqlDataAdap = new SqlDataAdapter(sqlCmd);

        DataTable dtRecord = new DataTable();
        sqlDataAdap.Fill(dtRecord);
        comboBox1.DataSource = dtRecord;
        comboBox1.DisplayMember = "TABLE_NAME";
        con.Close();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

然后我使用以下代码填充我的DGV,但它不起作用;请帮忙。

private void PopulateGridView()
{
    String strConnection = "Data Source=HP\\SQLEXPRESS;database=MK;Integrated Security=true";
    SqlConnection con = new SqlConnection(strconnection);

    try
    {
        con.Open();

        SqlCommand sqlCmd = new SqlCommand();

        sqlCmd.Connection = con;
        sqlCmd.CommandType = CommandType.Text;
        sqlCmd.CommandText = "select * from " + comboBox1.SelectedText;

        SqlDataAdapter sqlDataAdap = new SqlDataAdapter(sqlCmd);

        DataTable dtRecord = new DataTable();
        sqlDataAdap.Fill(dtRecord);
        dataGridView1.AutoGenerateColumns = true;
        dataGridView1.DataSource = dtRecord;
        dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
        con.Close();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    if (comboBox1.SelectedValue != null)
    {
        PopulateGridView(comboBox1.SelectedValue.ToString());
    }
}

2 个答案:

答案 0 :(得分:1)

试试这个:

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (comboBox1.SelectedValue != null)
        {
           string strConnection = "Data Source=HP\\SQLEXPRESS;database=MK;Integrated Security=true";
            SqlConnection con = new SqlConnection(strconnection);
            try
            {
                con.Open();
                SqlCommand sqlCmd = new SqlCommand();

                sqlCmd.Connection = con;
                sqlCmd.CommandType = CommandType.Text;
                sqlCmd.CommandText = "select * from " + comboBox1.SelectedValue;
                SqlDataAdapter sqlDataAdap = new SqlDataAdapter(sqlCmd);

                DataTable dtRecord = new DataTable();
                sqlDataAdap.Fill(dtRecord);
                dataGridView1.AutoGenerateColumns = true;
                dataGridView1.DataSource = dtRecord;
                dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
                con.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }

答案 1 :(得分:1)

试试这个: 使用下面的表格加载更新您的代码:

 private void Form1_Load(object sender, EventArgs e)
 {
    String strConnection = "Data Source=HP\\SQLEXPRESS;database=MK;Integrated Security=true";
    SqlConnection con = new SqlConnection(strConnection);
    try
    {
        con.Open();
        SqlCommand sqlCmd = new SqlCommand();

        sqlCmd.Connection = con;
        sqlCmd.CommandType = CommandType.Text;
        sqlCmd.CommandText = "Select table_name from information_schema.tables";

        SqlDataAdapter sqlDataAdap = new SqlDataAdapter(sqlCmd);
        DataTable dtRecord = new DataTable();
        sqlDataAdap.Fill(dtRecord);
        comboBox1.DataSource = dtRecord;
        comboBox1.DisplayMember = "table_name";
        comboBox1.ValueMember = "table_name";
        con.Close();
   }
   catch (Exception ex)
   {
        MessageBox.Show(ex.Message);
   }
}

所以基本上你增加了一行comboBox1.ValueMember = "table_name";

并按照以下方式制作PopulateGridView方法:

   private void PopulateGridView(string tblName)
        {
            String strConnection = "Data Source=HP\\SQLEXPRESS;database=MK;Integrated Security=true";
            SqlConnection con = new SqlConnection(strConnection);

            try
            {
                con.Open();

                SqlCommand sqlCmd = new SqlCommand();

                sqlCmd.Connection = con;
                sqlCmd.CommandType = CommandType.Text;
                sqlCmd.CommandText = "select * from " + tblName;

                SqlDataAdapter sqlDataAdap = new SqlDataAdapter(sqlCmd);

                DataTable dtRecord = new DataTable();
                sqlDataAdap.Fill(dtRecord);
                dataGridView1.AutoGenerateColumns = true;
                dataGridView1.DataSource = dtRecord;
                dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
                con.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

它必须工作。 另外,我知道,您到处创建了SqlConnection个对象,包括SqlCommandSqlDataAdapter

尝试用静态方法包装它们,即

 - public static SqlConnection OpenConnection()
 - public static DataTable ExecuteSelectQuery(string Query)
 - public static bool ExecuteModifyQuery(string Query)

尝试以尽可能少的代码编写。