0

customerid = コンボ ボックスに保存されている選択された customerid であるすべての顧客情報を選択し、結果を datagridview に表示したい このコードを試しましたが、gridview に結果が表示されません。

     private void button1_Click(object sender, EventArgs e)
    { 
        SqlConnection con = new SqlConnection(constring);
      int id = Convert.ToInt32(comboBox1.SelectedValue);
string cmdstring=string.Format("select *from customers where customer_id={0}",id);
        SqlCommand cmd = new SqlCommand(cmdstring,con);

        //cmd.Parameters.AddWithValue("@id",id);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataSet ds = new DataSet();
        //da.Fill(ds, "customers");
        //dataGridView1.DataSource = ds.Tables["customers"];

        con.Open();
         SqlDataReader red = cmd.ExecuteReader();


        con.Close();
        dataGridView1.DataSource = red;




        button = new DataGridViewButtonColumn();
        button.HeaderText = "edit";
        button.Tag = ds.Tables["customers"].Columns["customer_id"];

        dataGridView1.Columns.Add(button);

    }
4

2 に答える 2

3

いつでも DataBase クラスを作成できます。このクラスをリファクタリングして接続文字列を渡すか、.Config ファイルから接続文字列を読み取る必要がある場合は、これをテンプレートとして使用して開始することができます。また、はるかにクリーンです。DataTable を返していることに注意してください。単なる提案が好きな場合は、これを使用できます

public class ClassDataManagement 
{ 
   public DataTable GetData(string sqlcmdString, string connString)
   {
       SqlConnection con = new SqlConnection(connString);
       SqlCommand cmd = new SqlCommand(sqlcmdString, cn);
       SqlDataAdapter da = new SqlDataAdapter(cmd);
       con.Open();
       DataTable dt = new DataTable();
       da.Fill(dt);
       return dt;
   } 
}

DataTable の代わりに DataSet を使用する場合は、DataTable がある場所を置き換えるか、以下のような DataSet を返すようにメソッドを変更します

   public DataSet GetData(string sqlcmdString, string connString)
   {
       SqlConnection con = new SqlConnection(connString);
       SqlCommand cmd = new SqlCommand(sqlcmdString, cn);
       SqlDataAdapter da = new SqlDataAdapter(cmd);
       con.Open();
       DataSet ds = new DataSet();
       da.Fill(ds);
       return ds;
   }   

ds を返した後、このようにバインドする必要があります

   dataGridView1.DataSource = ds;
   dataGridView1.DataBind();
于 2012-12-05T01:57:32.563 に答える
0

バインドする前に接続を閉じているため、データ ソースとして互換性のない型を使用しているため、データを取得していないことは確かです。

    con.Close();
    dataGridView1.DataSource = red;

接続を閉じる前にデータ ソースを設定するか、少なくともデータを入力してください (データ リーダーの場合、列挙するとデータが入力されます)。さらに、DataGridView.DataSourceは、IList、IListSource、IBindingList、および IBindingListSource の 4 つのインターフェイスのいずれかを使用する必要があることを示します。SqlDataReader はこれらをサポートしていません。DataAdapters と DataReadersを読むことをお勧めします。これは、この種のコントロールにデータを入力するための機能の一部を概説しているためです。

于 2012-12-05T01:35:34.860 に答える