我需要使用以下列填充数据网格。
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;
我怎样才能解决这个问题。
答案 0 :(得分:1)
要从表格中的2个或更多个不同的表格中发出组合结果,请根据需要使用INNER JOIN
,LEFT JOIN
,RIGHT JOIN
或UNION
语句。
在这种情况下,您需要连接第一个表和其他表以获得所需的结果,假设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个不同的表的数据结构创建一个新类,填充新的表并使用。 (更简单,最清晰的解决方案)