You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET加载多CSV到DataGridView遇未实现方法错误求解决

VB.NET加载CSV到DataGridView出现“操作方法未实现”错误排查与解决

问题描述

编写的VB.NET代码意图将指定文件夹中的所有CSV文件数据加载到DataGridView控件,但运行时触发“操作方法未实现”错误,代码如下:

ReadBo类代码

Imports System.IO
Imports System.Text

Public Class ReadBo
    Public Shared Function ReadFile(ByVal FilePath As String) As DataTable
        Try
            Dim pathway As String() = Directory.GetFiles(FilePath)
            Dim dt As New DataTable
            dt.Columns.Add("File name")

            For item As Integer = 0 To pathway.Length - 1
                Dim files As New FileInfo(pathway(item))
                Dim dr As DataRow = dt.NewRow()

                Dim Lines As String() = File.ReadAllLines(files.ToString())
                Dim Fields As String()
                Fields = Lines(0).Split(New Char() {","})
                Dim Cols As Integer = Fields.GetLength(0)

                If item = 0 Then
                    For i As Integer = 1 To Cols
                        dt.Columns.Add("Col" & i, GetType(String))
                    Next
                End If

                For index As Integer = 0 To Lines.GetLength(0) - 1
                    Fields = Lines(index).Split(New Char() {","})
                    dr = dt.NewRow()
                    dr(0) = files.Name
                    For f = 1 To Cols
                        dr(f) = Fields(f - 1)
                    Next
                    dt.Rows.Add(dr)
                Next
            Next

            Return dt
        Catch ex As Exception
            MessageBox.Show("Error is " + ex.ToString())
        End Try
    End Function
End Class

Form1类代码

Imports Task2.ReadBo

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Try
            DataGridView1.AutoGenerateColumns = True
            Dim initialPath As String = "C:\Users\ng.yipeng\Desktop\Task2"
            FolderBrowserDialog1.SelectedPath = initialPath
            If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then
                TextBox1.Text = FolderBrowserDialog1.SelectedPath.ToString()
                Me.DataGridView1.DataSource = ReadFile(TextBox1.Text)
            End If
        Catch ex As Exception
            MsgBox("Error: " & ex.Message)
        End Try
    End Sub

    Private Function ReadFile(p1 As String) As Object
        Throw New NotImplementedException
    End Function
End Class

问题根源

Form1类中定义了一个局部的ReadFile私有函数,该函数直接抛出NotImplementedException,且优先级高于ReadBo类中的共享函数。当Button1_Click事件中调用ReadFile时,实际执行的是这个未实现的局部函数,因此触发“操作方法未实现”错误。

解决方案

方案1:删除局部未实现函数

直接移除Form1中的以下代码块:

Private Function ReadFile(p1 As String) As Object
    Throw New NotImplementedException
End Function

方案2:明确指定调用目标

如果需要保留局部函数(不推荐),修改事件中的调用代码,明确指向ReadBo类的共享函数:

Me.DataGridView1.DataSource = ReadBo.ReadFile(TextBox1.Text)

额外代码优化建议

  • 仅加载CSV文件:当前Directory.GetFiles(FilePath)会获取文件夹中所有类型文件,需添加过滤器只处理CSV:
    Dim pathway As String() = Directory.GetFiles(FilePath, "*.csv")
    
  • 处理空文件或空行:避免因CSV文件为空导致Lines(0)索引越界,添加判断:
    Dim Lines As String() = File.ReadAllLines(files.ToString())
    If Lines.Length = 0 Then Continue For ' 跳过空文件
    Dim Fields As String() = Lines(0).Split(New Char() {","})
    
  • 处理标准CSV格式:直接按逗号分割无法处理字段包含逗号(如"John,Doe",30)的合法CSV,建议使用TextFieldParser类处理:
    Using parser As New Microsoft.VisualBasic.FileIO.TextFieldParser(files.FullName)
        parser.TextFieldType = FileIO.FieldType.Delimited
        parser.SetDelimiters(",")
        ' 读取字段和数据逻辑...
    End Using
    
  • 异常处理优化:ReadBo的Catch块未返回有效DataTable,可能导致DataGridView绑定空值,建议添加返回语句:
    Catch ex As Exception
        MessageBox.Show("Error is " + ex.ToString())
        Return New DataTable() ' 返回空DataTable避免绑定错误
    End Try
    

内容的提问来源于stack exchange,提问作者Johnny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 04:50:40