VB.Net Datagridview到Datatable

时间:2013-11-26 05:30:40

标签: vb.net datagridview

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

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

datatable = datagridview.datasource


我试过这个,但失败了:

Dim dt As New DataTable
dt = TryCast(dgvCarAccidentInjury.DataSource, DataTable)


还有这个,

Dim dt As New DataTable(dgvCarAccidentInjury.DataSource)


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

DataTable data = (DataTable)(dgvMyMembers.DataSource);

我可以通过手动循环来实现,但有一种简单的方法,就像它在C#上的方式一样吗?


修改 我通过这行代码手动设置了datagridview的数据,

dgvCarAccidentInjury.Rows.Add(New String() {"test1", "test2", "test3", "test4"})

此外,还有第5列(图像列),实际上它是空的。对不起,我错过了这个重要的观点。

修改

通过手动循环解决此问题的方法。

    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

其他解决方案:

Dim dt As New DataTable
dt = TryCast(yourdatagridview.DataSource, DataTable)

5 个答案:

答案 0 :(得分:2)

你的问题不是演员:

 dt = TryCast(dgvMyMembers.DataSource, DataTable)

但您的DataSource不是DataTable,而是数组

dgvCarAccidentInjury.Rows.Add(New String() {"test1", "test2", "test3", "test4"})

因此,请确保DataGridView已正确连接DataTable source 第一,例如:

dgvMyMembers.DataSource = dtSourceHere

可能是你的Form_Load()

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

 dgvMyMembers.DataSource = dtSourceHere

End Sub

如果要将字符串添加到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")

然后将其设为DataSource的{​​{1}}:

DataGridView

您可以稍后在所需的 dgvMyMembers.DataSource = dt 上执行此操作:

TryCast()

答案 1 :(得分:2)

 Dim DtGrid As DataTable
 DtGrid = CType(dgrd_WWWH.DataSource, DataTable).Copy()

答案 2 :(得分:1)

你试过克隆桌子吗?如果您使用DataSource设置DataTable,则克隆原始文件。如果您有差异DataSource - 它将无法转换DataSource

DataTable.Clone

Dim dt As DataTable = originalDt.Clone()

答案 3 :(得分:0)

create procedure upd_agregar
    (@idEmpresa int, @sucursal nvarchar(25),@direccion nvarchar(100),@telefono nvarchar (25),@email nvarchar(25))
    as
        declare @longitud int, @codEmpresa nvarchar(2),@codSucursal nvarchar (2)
        --Generar codigo de empresa
        IF len(CAST(@idEmpresa AS NVARCHAR(2))) < 2
        SET @codEmpresa = CONCAT ('0', CAST(@idEmpresa AS NVARCHAR(2)))
        ELSE
        SET @codEmpresa = @idEmpresa

        PRINT @codEmpresa
    GO

-- EXEC upd_agregar 1, 'B', 'C', 'D', 'E'
-- Result: 01

答案 4 :(得分:0)

我已经尝试过这种方法,并且可以正常工作。

                            Dim dt As New DataTable
                            Dim dc As DataColumn = New DataColumn("MOBILENUMBER")
                            dc.DataType = System.Type.GetType("System.String")
                            dc.MaxLength = 15
                            dt.Columns.Add(dc)
                            For n As Integer = 0 To dgvMobiles.Rows.Count - 2
                                dtr = dt.NewRow()
                                dtr.Item("MOBILENUMBER") = dgvMobiles.Rows(n).Cells(0).Value
                                dt.Rows.Add(dtr)
                            Next                        

其中 dgbMobiles 是datagridview,我可以输入联系人的手机号码。

我希望是我们

相关问题