使用来自多个表的数据填充数据网格
本文关键字:数据 填充 数据网 网格 | 更新日期: 2023-09-27 17:56:38
我需要用以下列填充数据网格。
编号,项目名称,费率,数量..
项目名称,费率,数量来自一个表,而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 个或多个不同表发出组合结果,请根据需要使用 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";
或者,如果您已经为每个表定义了类,请将 LINQ to SQL 与 lambda 表达式一起使用:
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 });
欢迎任何改进和建议。
为 2 个不同表的数据结构创建一个新类,填充新类并使用。(更简单,最清晰的解决方案)