【问题标题】:vb.net Compare two columns, one from datagridview and one from excelvb.net 比较两列,一列来自datagridview,一列来自excel
【发布时间】:2021-10-08 05:19:35
【问题描述】:

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

【问题讨论】:

    标签: excel vb.net compare datagridviewcolumn


    【解决方案1】:

    我会这样做:

    • datagridview 中的现有数据理想情况下应该存在于数据表中,而 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 文件中的数据,我也将其读入数据表(需要对以下连接字符串和命令/工作表名称等进行一些调整)
        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 个 datagridviews(在上面,我称它们为 someDGV 和 anotherDGV),我会让它们都处于 Full Column Select 模式(并关闭多选)
    • 我会让用户单击每个网格中的某个位置,从而突出显示每个列中的一列
    • 我有一个带有单击处理程序的按钮,该处理程序检索每个 DGV 的 SelectedColumns(0) - 第一个选定的 DataGridViewColumn 列,从那里我可以获得该列的 .DataPropertyName 以了解数据表中列的名称列绑定到哪个列,然后我可以运行比较,无论这意味着什么
    
        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 的表数据都是以相同的方式获取的。我只是不知道您的总体目标是什么,如何将行链接在一起等

    【讨论】:

    • 谢谢。我决定使用你的方法。我的道路有很多障碍,我什至看不到它的去向,但是在看到你的方法之后,它变得很有意义!
    • 如果您有很多行,您可能需要查看行的索引策略。如果您的查找需要很长时间,请回复评论
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    • 1970-01-01
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    相关资源
    最近更新 更多