使用 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