0

我想选择所有客户信息,其中 customerid = 存储在组合框中的所选客户 ID,并在 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

你总是可以创建一个数据库类,如果你需要重构这个类以传入连接字符串或从 .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;
   } 
}

如果您想使用 DataSet 而不是 DataTable 替换我有 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。SqlDataReader 不支持这些。我建议阅读DataAdapters 和 DataReaders,因为这概述了用于填充此类控件的一些功能。

于 2012-12-05T01:35:34.860 回答