使用多个表中的数据填充Datagrid

时间:2016-07-13 06:47:14

标签: c# sql .net datagrid

我需要使用以下列填充数据网格。

invnumber,ITEMNAME,速率,数量..

itemname,rate,quantity来自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;

我怎样才能解决这个问题。

2 个答案:

答案 0 :(得分: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";

或者,如果已经为每个表定义了类,请使用带有lambda表达式的LINQ to 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 });

欢迎任何改进和建议。

答案 1 :(得分:0)

为2个不同的表的数据结构创建一个新类,填充新的表并使用。 (更简单,最清晰的解决方案)