【问题标题】:Importing excel into datagridview WITH verification将excel导入datagridview并进行验证
【发布时间】:2018-06-25 17:49:33
【问题描述】:

目前,我可以通过一个按钮将 excel 文件导入我的 datagridview。我尝试了许多在网上找到的要导入的不同代码,最后找到了一个有效的代码,只需稍加改动即可。我遇到的最大问题是“读取”excel文件中单元格的内容,如果有某个我不想要的验证步骤,程序不会导入文件。

例如,在第 1 列中,如果有一个小于 0 的数字,则应取消导入。

或者另一个例子,如果一个列(应该只是数字)有一个字母条目,则应该取消导入。

在其他语言中,我可以把它想象成简单的 If 语句,但我是 VB 新手。

如果有人能引导我走向正确的方向,那将不胜感激

我使用的主页是; Importing Excel Data in Datagridview using VB.Net

我当前的代码;

    Dim dbconnect As OleDb.OleDbConnection
    Dim dta As OleDb.OleDbDataAdapter

    Dim dts As DataSet
    Dim excel As String
    Dim OpenFileDialog As New OpenFileDialog

    OpenFileDialog.InitialDirectory = My.Computer.FileSystem.SpecialDirectories.MyDocuments
    OpenFileDialog.Filter = "All Files (*.*)|*.*|Excel files (*.xlsx)|*.xlsx|CSV Files (*.csv)|*.csv|XLS Files (*.xls)|*xls"

    If (OpenFileDialog.ShowDialog(Me) = System.Windows.Forms.DialogResult.OK) Then

        Dim file As New FileInfo(OpenFileDialog.FileName)
        Dim FileName As String = OpenFileDialog.FileName
        ' Dim selectedrowcount As Integer = DataGridView1.Rows.GetRowCount(DataGridViewElementStates.Selected)

        excel = file.FullName
        dbconnect = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excel + ";Extended Properties='Excel 12.0;HDR=NO;IMEX=1'")
        dta = New OleDbDataAdapter("select * from [Feuil1$]", dbconnect)
        ' dta = New OleDbDataAdapter("select * from [Sheet1$]", dbconnect)

        dts = New DataSet

        dta.Fill(dts, "[Feuil1$]")

        ' dta.Fill(dts, "[Sheet1$]")
        DataGridView1.DataSource = dts
        DataGridView1.DataMember = "[Feuil1$]"
        dbconnect.Close()

        DataGridView1.DefaultCellStyle.Format = "N2"

                   DataGridView1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter

        '   MsgBox("Data has been imported")

    End If

End Sub

【问题讨论】:

  • dts 中有您的数据...在填充命令后进行验证。如果不通过,不要将其指定为数据网格的来源
  • 感谢您的意见。我想我明白了,所以在填充命令之后..它会是一种方法吗?在另一个子中创建? '在填充命令之后,就像你说的 dta.Fill(dts, "[Feuil1$]") verifyStep() 我会在 'end Sub' 之后定义这个函数吗?或者是否有可能/更好地在同一个 Sub 内完成这一切?

标签: excel vb.net visual-studio datagridview import


【解决方案1】:

这是我评论中的一个基本示例。请注意,关闭命令已上移。

在这种情况下,只有当数据以您希望的方式显示时,数据才会绑定到网格。

' Fill Data Set and Close Connection (I Moved the Close)
dts = New DataSet
dta.Fill(dts, "[Feuil1$]")
dbconnect.Close()

' Loop Through the Data And Make Sure Its Good
Dim dataSuccess as Boolean = True
Dim rowIndex as Integer = 0
For Each row as DataRow in dts.Tables(0).Rows

    If Convert.ToInt32(row(0)) < 0 Then
        System.Windows.Forms.MessageBox.Show("Invalid Data in Row: " + rowIndex + " - 1st Column is Less Than Zero", "Data Import")
        dataSuccess = False
        Exit For
    End If

    rowIndex = rowIndex + 1
Next

' If Its Good, Bind It
If dataSuccess Then

    DataGridView1.DataSource = dts
    DataGridView1.DataMember = "[Feuil1$]"

End If

【讨论】:

  • 谢谢,这很有意义。我会尝试以此为基础工作
猜你喜欢
  • 2018-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多