0

次のコードを使用して、SQL db テーブルの名前をコンボ ボックスに表示しました。

ここで、コンボ ボックスからこれらのテーブル名のいずれかをクリックすると、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());
    }
}
4

2 に答える 2

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);
   }
}

したがって、基本的に1行余分に追加しました 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)

できる限り少ない量のコードを書くようにしてください。

于 2013-03-13T07:09:48.600 に答える
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);
            }
        }
    }
于 2013-03-13T06:53:56.203 に答える