如何在 VB.NET 中使用 Dapper 和 MS-Access 数据库更改 datagridview 中 SQL 的值

How to change value from SQL in datagridview using Dapper with MS-Access database in VB.NET

提问人:roy 提问时间:7/29/2023 最后编辑:marc_sroy 更新时间:7/30/2023 访问量:73

问:

我想更改 datagridview 中显示的值是否有解决方案,对于实际的数据库记录信息,如果并集,则有 100,000 个,但每个表的列“WRH”的每个值只有一个值,除非有一个表有 2 个这样的值。

我要更改的值信息如下:

001 BECOMES A
002 BECOMES B
003 BECOMES C

或者有其他解决方案请指导我

谢谢

Const constrA = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\TABLEA.accdb;Persist Security Info=False;"
Const constrB = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\TABLEB.accdb;Persist Security Info=False;"
Const constrC = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\TABLEC.accdb;Persist Security Info=False;"

Function GetUsers(constr As String) As IEnumerable(Of Users)
        Using con As OleDbConnection = New OleDbConnection(constr)
      Return con.Query(Of Users)("SELECT * From Users Where WRH ='001' OR WRH ='002' OR WRH ='003'")
        End Using
End Function

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
   DataGridView1.DataSource = GetUsers(constrA).Union(GetUsers(constrB)).Union(GetUsers(constrC)).ToList
End Sub

Public Class Users
    Public Property Id() As Integer
    Public Property Firstname() As String
    Public Property LastName() As String

    Public Property WRH() As String
End Class

表A :Users

编号 名字 姓氏 WRH公司
1 TEST1000 1000测试 001
2 TEST2000 2000测试 001

表B:Users

编号 名字 姓氏 WRH公司
1 TEST3000 3000测试 002
2 TEST4000 4000测试 002

表C:Users

编号 名字 姓氏 WRH公司
1 TEST5000 5000测试 003
2 TEST6000 6000测试 004

datagridview 中的预期结果

名字 姓氏 WRH公司
TEST1000 1000测试 一个
TEST2000 2000测试 一个
TEST3000 3000测试 B
TEST4000 4000测试 B
TEST5000 5000测试 C
SQL vb.net MS-Access DataGridView dapper

评论

0赞 Jimi 7/29/2023
您可能只需使用事件更改 Column 值的表示形式(类似于 )。如果转换实际上不是那么简单,您需要一个映射器(例如,Dictionary<string、string>)CellFormattingCharW([Column Value as Integer] + 64)
0赞 roy 7/29/2023
@Jimi,如果它转换,那么将需要很长时间才能将数据加载到 DataGridView 中,因为实际数据库有十万条记录。请您指导
0赞 roy 7/29/2023
@Jimi,请推荐和指导我使用这个和CellFormatting event (something like CharW([Column Value as Integer] + 64))you need a mapper (e.g, a Dictionary<string, string>)

答:

0赞 roy 7/30/2023 #1

我有 2 个答案。

下面的第一个答案基于链接 定期根据条件更改 datagridview 单元格颜色

仅适用于小记录

    Private Sub DataGridView1_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
        For Each Myrow As DataGridViewRow In DataGridView1.Rows 'Here 2 cell is target value and 1 cell is Volume
            If Myrow.Cells(3).Value.ToString() = "001" Then
                Myrow.Cells(4).Value = "A"
            End If
            If Myrow.Cells(3).Value.ToString() = "002" Then
                Myrow.Cells(4).Value = "B"
            End If
            If Myrow.Cells(3).Value.ToString() = "003" Then
                Myrow.Cells(4).Value = "C"
            End If
        Next Myrow

    End Sub

下面的第二个答案基于链接 多个 IIF 标准定期访问

仅适用于大型记录

"SELECT ID,Firstname,LastName,WRH,IIF([WRH] ='001','A',IIF([WRH] ='002','B',IIF([WRH] ='003','C'))) AS WRH_Name From Users Where WRH ='001' OR WRH ='002' OR WRH ='003'"