使用 SQL 查询填充 DataGridView 行

Posted

技术标签:

【中文标题】使用 SQL 查询填充 DataGridView 行【英文标题】:Fill DataGridView row with an SQL query 【发布时间】:2021-01-04 18:43:05 【问题描述】:

我想做的是用连接的 Access 数据库中的特定数据组合填充一行。

所以我像这样填写我的行:

DataRow dr = table.NewRow();    
dr[3] = Textbox1.Text;
table.Rows.Add(dr);

这基本上只是从文本框中获取文本并填充索引 3 表行。

我想做的是从数据库中获取两个表数据,它们与我在 DataGridView 中的行连接,然后将它们相乘。我无法真正清楚地解释这一点,所以这是一个 SQL 查询:

从号码中选择号码 1 * 号码 2

我想用 Number1 填充一个 DataGridView 单元格,用 Number2 填充一个单元格,还用 Number1 * Number2 填充一个单元格,但我不知道如何在实际代码中做到这一点。

我认为我应该将这些值作为双精度或字符串变量,但我不知道如何。

【问题讨论】:

DataColumn.Expression 例如:Correct event to calculate Cells values in a DataGridView 和一些注意事项:How to properly concatenate the values of Columns of a DataTable? 这可能很有趣。 【参考方案1】:

您的查询不能写成:

SELECT Number1, Number2, (Number1 * Number2) AS MyMult FROM MyTable

因此,您不需要循环,只需将生成的数据表绑定到 GriView。

例如: VB

dim strSQL as string
strSQL  = "SELECT Number1, Number2, (Number1 * Number2) AS MyMult FROM MyTable"
GridView1.datasource = MyRst(strSQL)
GridView1.databind()

c#

string strSQL;
strSQL = "SELECT Number1, Number2, (Number1 * Number2) AS MyMult FROM MyTable";
GridView1.datasource = MyRst(strSQL);
GridView1.databind();

在上面,MyRst 只是一个方便的例程,它返回一个数据表类型。 (因此您不必一遍又一遍地键入 sqlCommand 和连接对象)。

【讨论】:

错误的平台:) 确实,与 asp.net 和 web 表单相比,我确实错过了 winforms。但是,答案和建议似乎仍然适用。 (将表达式放入查询中)。 是的,GridView1.databind(); 确实不合适。 -- 与我之前的评论无关,因为你提到:当然你可以创建一个计算的Column/Field,返回的值也是static。如果活动列值之一发生更改,则不会更新该值。因此,它更适用于 report 而不是 动态控件,在 DataGridView 呈现时由用户或其他外部源修改(因此,我提出了 Expression )。只是一个注释; OP 可能只需要预先计算的值而不需要其他任何东西。 确定,如果需要编辑结果?然后在行绑定将是票(我认为它存在于winforms) - 必须运行但会更新这篇文章。 很遗憾,没有行绑定通知。当数据绑定完成(数据源已被处理)时,您会收到通知。您可以使用CellValueChanged 事件,但通常情况下,如果您可以在其他地方执行相同的操作(例如,使用源查询),您会尽量避免这种情况,因为您知道,WinForms 控件非常高效且反应灵敏,很遗憾让他们慢下来:)。表达式由底层 DataTable 的 DataColumn 应用,因此您无需添加绑定到事件处理程序的代码,一切都是自动的。

以上是关于使用 SQL 查询填充 DataGridView 行的主要内容,如果未能解决你的问题,请参考以下文章

将 sql 查询填充到 vb.net 上的 datagridview 中

使用 sqldatareader 从另一个线程逐行填充 DataGridView

使用 sql 语句从第二个 datagridview 填充 DataGridView

使用Lambda表达式查询SQL语句填充的DataTable

给datagridview绑定了数据源后 要其显示怎么办

DataGridVIew 填充匿名类型,如何过滤?