2012-12-05 14 views
0

我想選擇所有客戶信息,其中customerid =存儲在組合框中的選定customerid並在datagridview中顯示結果我試過這段代碼,但gridview沒有顯示結果。如何在Windows窗體中選擇Where語句

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

    } 
+3

你不應該使用字符串連接來創建查詢;你打開自己的SQL注入。您應該使用參數化查詢。 – Servy

+1

你可以將你的代碼包裝在你正在做cmd.ExecuteReader的嘗試catch中。 – MethodMan

+0

首先讓我們開始讓你的DataTable正確地返回,然後我們可以轉移到獲取Column信息,很難告訴你的代碼是什麼或者在哪裏拋出錯誤沒有適當的異常處理 – MethodMan

回答

0

我相當肯定,因爲你綁定之前關閉連接你沒有得到任何數據,因爲您使用的是不兼容的類型作爲數據源:

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

在關閉連接之前設置數據源,或至少確保填充數據(對於數據讀取器,數據在您列舉時填充)。此外,DataGridView.DataSource表示它必須使用以下四個接口之一:IList,IListSource,IBindingList和IBindingListSource。 SqlDataReader不支持這些。我建議閱讀DataAdapters and DataReaders,因爲這概述了一些用於填充這種控件的功能。

+1

他看起來像他缺少一個.Fill()方法以及 – MethodMan

+0

啊,我想這可能是一種方法,但我不熟悉DataGridView知道它的名字(我一直認爲它是DataBind(),但沒有在課堂上看到它)。 – Rob

+0

我明白你在說什麼,但是我想在DataBind()之前它必須有「DATA」綁定到.. – MethodMan

3

你總是可以創建一個DataBase類,如果你需要重構這個類來傳遞連接字符串或者讀取來自.Config文件的連接字符串,你可以使用它作爲模板來開始加上它更清潔 請注意,如果你喜歡只是一個建議,我回你可以使用這個數據表

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像下面這樣

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