VB.Net Datagridview 到数据表

Cod*_*eee 4 vb.net datagridview

我想创建一个基于 5 列数据表的数据表。另外,我想删除最后一列(它是图像列)。

基本上,我想要的是(伪代码)

datatable = datagridview.datasource
Run Code Online (Sandbox Code Playgroud)


我已经尝试过这个,但失败了:

Dim dt As New DataTable
dt = TryCast(dgvCarAccidentInjury.DataSource, DataTable)
Run Code Online (Sandbox Code Playgroud)


和这个,

Dim dt As New DataTable(dgvCarAccidentInjury.DataSource)
Run Code Online (Sandbox Code Playgroud)


我又失败了。我在c#专栏上看到了这个,但我不知道如何将它转换为vb.net,也许这是解决方案,但我不知道VB中的语法。

DataTable data = (DataTable)(dgvMyMembers.DataSource);
Run Code Online (Sandbox Code Playgroud)

我可以通过手动循环来完成,但是有没有像 C# 上那样简单的方法?


编辑 我已经通过执行这行代码手动设置了 datagridview 的数据,

dgvCarAccidentInjury.Rows.Add(New String() {"test1", "test2", "test3", "test4"})
Run Code Online (Sandbox Code Playgroud)

另外,还有第五列(图像列),实际上它是空的。抱歉,我错过了这一重要点。

编辑

这个问题的解决方案是这样的,通过手动循环。

    Dim dt As New DataTable
    Dim r As DataRow

    dt.Columns.Add("a", Type.GetType("System.String"))
    dt.Columns.Add("b", Type.GetType("System.String"))
    dt.Columns.Add("c", Type.GetType("System.String"))
    dt.Columns.Add("d", Type.GetType("System.String"))

    For i = 0 To dgvCarAccidentInjury.Rows.Count - 1
        r = dt.NewRow
        r("a") = dgvCarAccidentInjury.Item(0, i).Value.ToString
        r("b") = dgvCarAccidentInjury.Item(1, i).Value.ToString
        r("c") = dgvCarAccidentInjury.Item(2, i).Value.ToString
        r("d") = dgvCarAccidentInjury.Item(3, i).Value.ToString
        dt.Rows.Add(r)
    Next
Run Code Online (Sandbox Code Playgroud)

其他解决方案:

Dim dt As New DataTable
dt = TryCast(yourdatagridview.DataSource, DataTable)
Run Code Online (Sandbox Code Playgroud)

Edp*_*per 5

你的问题不是演员:

 dt = TryCast(dgvMyMembers.DataSource, DataTable)
Run Code Online (Sandbox Code Playgroud)

但你的DataSource不是一个DataTable而是一个String 数组

dgvCarAccidentInjury.Rows.Add(New String() {"test1", "test2", "test3", "test4"})
Run Code Online (Sandbox Code Playgroud)

因此,请确保您的DataGridView连接正确DataTable source 例如:

dgvMyMembers.DataSource = dtSourceHere
Run Code Online (Sandbox Code Playgroud)

可能会做你的Form_Load()

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

 dgvMyMembers.DataSource = dtSourceHere

End Sub
Run Code Online (Sandbox Code Playgroud)

如果要将字符串添加到 DataGridView,最好创建 DataTable 添加这些字符串,例如:

    Dim dt As New DataTable
    dt.Columns.Add("Names", GetType(String))

    dt.Rows.Add("test1")
    dt.Rows.Add("test2")
    dt.Rows.Add("test3")
    dt.Rows.Add("test4")
Run Code Online (Sandbox Code Playgroud)

然后将其设为DataSource您的DataGridView

    dgvMyMembers.DataSource = dt
Run Code Online (Sandbox Code Playgroud)

您可以稍后执行TryCast()您想要的操作:

    Dim dtNew As New DataTable
    dtNew = TryCast(dgvMyMembers.DataSource, DataTable)
Run Code Online (Sandbox Code Playgroud)

  • 当您构建这样的结构时,这并不是制作数据表,并且您的数据源是“Nothing”。 (2认同)