使用来自多个表的数据填充数据网格

本文关键字:数据 填充 数据网 网格 | 更新日期: 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 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 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 个不同表的数据结构创建一个新类,填充新类并使用。(更简单,最清晰的解决方案)