2016-07-13 60 views
0

我需要使用以下列填充數據網格。使用多個表中的數據填充Datagrid

invnumber,ITEMNAME,速度,數量..

ITEMNAME,速度,數量來自1臺,同時invnumber來自另一個表

我用來做這樣的

string commandText = "SELECT invnumber,cname,date FROM inv_table WHERE invnumber LIKE @id"; 
          SqlCommand command = new SqlCommand(commandText, conn); 
          string searchParam = String.Format("%{0}%", text_inv.Text); 
          command.Parameters.AddWithValue("@id", searchParam); 


          using (SqlDataAdapter sda = new SqlDataAdapter(command)) 
          { 
           using (DataTable dt = new DataTable()) 
           { 
            sda.Fill(dt); 
            dataGridView2.DataSource = dt; 
           } 
          } 

現在我不能直接分配數據源,因爲涉及2個不同的表格

dataGridView2.DataSource = dt; 

我該如何解決這個問題。

+0

你爲什麼不加入這些表? –

+0

@ un-lucky ..你可以發佈一個例子.. – techno

回答

1

從2個或多個不同的表發出綜合作用的結果在一個表中,請根據您的需要或者INNER JOINLEFT JOINRIGHT JOINUNION聲明。

在這種情況下,您需要加入第一個表格和其他表格以獲得期望的結果,假設invnumber是唯一的或主鍵。這裏有一個例子:

string commandText = "SELECT other.invnumber, inv.cname, inv.date FROM inv_table AS inv 
INNER JOIN other_table AS other 
ON inv.invnumber = other.invnumber 
WHERE other.invnumber LIKE @id"; 

或者,如果你已經爲每個表定義的類,使用LINQ與lambda表達式SQL:

DataContext dc = new DataContext(); 
var results = dc.InvTable.Join(OtherTable, inv => inv.invnumber, other => other.invnumber, (inv, other) => new { invnumber = other.invnumber, cname = inv.cname, date = inv.date }); 

任何改進和建議表示歡迎。

+0

謝謝..你是什麼意思的'inv.invnumber = other.invnumber'.I的意思是'inv。'.. – techno

+0

因爲我不知道什麼領域在你設計爲外鍵的'inv_table'上,我假設你在處理INNER JOIN中的ON等於語句時,在你的'inv_table'中有'invnumber'作爲'other_table'主鍵的外鍵。如果存在,請將'inv_table'的外鍵定義爲'other_table'。 –

+0

我已經將id定義爲兩個表的主鍵。 – techno

0

爲2個不同的表的數據結構創建一個新的類,填充新的類並使用。 (更容易和最清晰的解決方案)

相關問題