【问题标题】:Visual Basic 2017 - DataGridViewVisual Basic 2017 - 数据网格视图
【发布时间】:2018-10-09 02:43:25
【问题描述】:

所以我的子程序有困难。我正在创建一个应用程序来帮助地牢大师。我的应用程序要做的部分工作是在单独的选项卡中显示几个电子表格,其中包含项目列表和与之相关的详细信息。我想重用我的几个代码,而不是编写 20 个左右几乎相同的子例程。

这是我的代码,我不知道如何解决我的问题。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    loadExcel("C:\Users\secretUserName\source\repos\QUILLandDAGGER\QUILLandDAGGER\bin\Debug\recIntKnowl.xls",dgvRecEntKnowl)
End Sub

    Private Sub loadExcel(strFilename As String, dgvView As DataGridView)
    Try
        Dim MyConnection As OleDb.OleDbConnection
        Dim Ds As System.Data.DataSet
        Dim MyAdapter As System.Data.OleDb.OleDbDataAdapter
        MyConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source='strFileName';Extended Properties=Excel 8.0;")
        MyAdapter = New System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", MyConnection)
        Ds = New System.Data.DataSet
        MyAdapter.Fill(Ds)
        dgvView.DataSource = Ds.Tables(0)
        MyConnection.Close()
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub

【问题讨论】:

  • “我不知道如何解决我的问题”。什么问题?尝试描述具体需要帮助实现的目标。
  • 我发现它没有拉起 excel 表。该文件指向正确的位置,尽管我在该位置之外编辑了我的名字只是为了看到它实际上是我的用户名的一部分 o.0 哎呀我的猜测是文件位置,如 strFileName 中的指示,在 loadExcel 中不可读子程序。我更正了标题中的大写字母。这并没有解决我的问题。

标签: vb.net visual-studio winforms


【解决方案1】:

像这样构建方法:

Private Function LoadExcel(ByVal strFilename As String, Optional ByVal SheetName As String = "Sheet1$") As DataTable
    Dim SQL As String = "SELECT * FROM [" & SheetName & "]"

    Dim result As New DataTable
    Using MyConnection As New OleDb.OleDbConnection(), _
          MyCommand As New OleDb.OleDbCommand(SQL, MyConnection)
        MyConnection.Open()
        Using reader As OleDb.OleDbDataReader = MyCommand.ExecuteReader()
           result.Load(reader)
        End Using
    End Using
    Return result
End Function                

这个新代码有很多改进,有大有小。最重要的是添加 Using 块,将数据访问与 UI 分离,以及设计接受输入以返回结果的函数。

这样称呼它:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Try
        dgvRecEntKnowl.DataSource = LoadExcel("C:\Users\secretUserName\source\repos\QUILLandDAGGER\QUILLandDAGGER\bin\Debug\recIntKnowl.xls.xls")
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub

至于这是否真的能解决任何问题...这取决于您遇到的问题,未包含在发布的问题中。

【讨论】:

    【解决方案2】:

    很抱歉未能发布我的问题。我实际上并不直接知道我的问题出在哪里,我花了几个小时试图找到它。

    我的第一个问题是将包含的字符串直接传递给文件。指向文件的方式很糟糕,我稍后会解决它并让它指向一个子目录。

    我的第二个问题是特定行,我解决了这个问题。

                MyConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source='C:\Users\seidl\source\repos\QUILLandDAGGER\QUILLandDAGGER\bin\Debug\detect.xls';Extended Properties=Excel 8.0;")
    

    这行代码是我的原始文本,它有效。

                MyConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source='strFileName';Extended Properties=Excel 8.0;")
    

    这是我尝试过的,但没有奏效。我什至删除了围绕文本的 ' 并且它不起作用。

    所以它终于吸引了我,尝试我在编写文本字符串时在 Java 中使用的东西,并且我需要在我的文本行中使用变量。 +

            MyConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + strFileName + "';Extended Properties=Excel 8.0;")
    

    这最终发挥了作用。我猜测 OleDbConnection 接收一长串字符并分解字符串以读取所需的内容。我可能是错的,但这非常有趣!花了好几个小时才终于看到这个。

    乔尔,我会调查你回复的内容并尝试清理我的代码。谢谢!

    【讨论】:

    • 使用& 进行字符串连接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    相关资源
    最近更新 更多