vb.net 比较两列,一列来自 datagridview,一列来自 excel

vb.net Compare two columns, one from datagridview and one from excel

我正在写一个比较工具。要点是比较两列以确认从哪一行获取数据。我不确定解决这个问题的最佳方法是什么。一列在数据网格视图中,另一列在 excel 电子表格中,只有用户知道使用哪一个进行比较。现在我正在考虑选择 datagridview 中的列(因为我知道如何查找选定的列),然后用户将单击 excel 电子表格中的一个单元格,它会告诉我列在哪里。我的问题是所有点击事件都与 datagridview 所在的表单有关,我不知道如何获取用户点击的 excel 单元格。我希望这是有道理的。有没有更好的办法?如何获取用户点击的单元格?

我会采取不同的方式:

  • datagridview 中的现有数据理想情况下应该存在于 datatable 中,而 datagridview 只是绑定到它。这样的设置看起来像这样:
    Dim dt as New DataTable
    dt.Columns.Add("ID", GetType(Integer))
    dt.Columns.Add("Name") 'string

    dt.Rows.Add(1, "John")
    dt.Rows.Add(2, "Mary")

    someDataGridView.DataSource = dt
  • 对于 excel 文件中的数据,我也将其读入数据 table(需要对以下连接字符串和 command/sheet 名称等进行一些调整)
    Dim con = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\path\to\your.xls;Extended Properties=""Excel 12.0;HDR=No;IMEX=1"""
    Dim cmd = "SELECT * FROM [Sheet1$]"
    Dim dt as New DataTable
    
    Using da as New OleDbDataAdapter(cmd, con)
      da.Fill(dt)
    End Using

    anotherDataGridView.DataSource = dt
  • 我有 2 个数据网格视图(上面,我称它们为 someDGV 和 anotherDGV)并且我将它们都处于 Full Column Select 模式(并且多个 select 关闭)
  • 我会让用户点击每个网格中的某处,从而突出显示每个网格中的一列
  • 我有一个带有点击处理程序的按钮,它检索每个 DGV 的 SelectedColumns(0) - 第一个 selected DataGridViewColumn 列,从那里我可以获得 .DataPropertyName column 知道数据table中该列绑定到的列的名称,然后我可以运行比较,不管那是什么意思

    Dim someColumn = someDGV.SelectedColumns(0).DataPropertyName
    Dim dt = DirectCast(someDGV.DataSource, DataTable) 'get the datatable back
    For Each ro as DataRow in dt
      Dim value = ro(someColumn).ToString() 

      ...

你必须自己填写比较逻辑 - 每个 DGV 的 table 数据都是以相同的方式获取的。我只是不知道你的总体目标是什么,你将如何 link排在一起等