使用VB.Net和Access将字符串转换为DataGridViewTextBoxColumn

使用VB.Net和Access将字符串转换为DataGridViewTextBoxColumn,vb.net,string,ms-access,datagridview,datagridviewcolumn,Vb.net,String,Ms Access,Datagridview,Datagridviewcolumn,在网上找不到任何东西,我想我错过了一些小东西 我在access数据库中有一个列名列表,它应该与我在vb.net项目中创建的DataGridViewTextBoxColumn匹配。我想使用access数据库中的列名将DataGridViewTextBoxColumn调用到我的dgv中。示例代码如下: Dim column1 As New DataGridViewTextBoxColumn Dim column2 As New DataGridViewTextBoxColumn

在网上找不到任何东西,我想我错过了一些小东西

我在access数据库中有一个列名列表,它应该与我在vb.net项目中创建的DataGridViewTextBoxColumn匹配。我想使用access数据库中的列名将DataGridViewTextBoxColumn调用到我的dgv中。示例代码如下:

    Dim column1 As New DataGridViewTextBoxColumn
    Dim column2 As New DataGridViewTextBoxColumn
    Dim myheader As New DataGridViewTextBoxColumn

    With column1
        .Name = "column1"
        .HeaderText = "Column 1"
        .SortMode = DataGridViewColumnSortMode.NotSortable
        .Width = 200
    End With

    With column2
        .Name = "column2"
        .HeaderText = "Column 2"
        .SortMode = DataGridViewColumnSortMode.NotSortable
        .Width = 400
    End With

    a = 0

    Do While a < 2
        myheader = ds.Tables("columnheadersdatabase").Rows(a).Item("J001") '//rows(a) = column1 and rows(a + 1) = column2
        dgv.Columns.Add(myheader)
        a += 1
    Loop
我似乎可以将access单元格值转换为DataGridViewTextBoxColumn(myheader)。我尝试使用dim myheader作为字符串,但也不起作用


如果有人有任何想法,我们将非常感谢您的帮助

可以将
DataGridViewTextBoxColumn
对象存储在列表中。函数可以检查是否必须在DataGridView的columns集合中添加该列表的项

请尝试以下代码:

'Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        'Test data
        'Dim ds As New DataSet
        'Dim tb As New DataTable("columnheadersdatabase")
        'tb.Columns.Add("J001")

        'tb.Rows.Add(tb.NewRow)
        'tb.Rows.Add(tb.NewRow)
        'tb.Rows.Add(tb.NewRow)

        'tb(0).Item("J001") = "column1"
        'tb(1).Item("J001") = "column2"
        'tb(2).Item("J001") = "column3"

        'ds.Tables.Add(tb)

        'A list that will contain all the DataGridViewTextBoxColumns
        Dim TextBoxColumnList As New List(Of DataGridViewTextBoxColumn)
        Dim column1 As New DataGridViewTextBoxColumn With
            {
                .Name = "column1",
                .HeaderText = "Column 1",
                .SortMode = DataGridViewColumnSortMode.NotSortable,
                .Width = 200
            }
        Dim column2 As New DataGridViewTextBoxColumn With
            {
                .Name = "column2",
                .HeaderText = "Column 2",
                .SortMode = DataGridViewColumnSortMode.NotSortable,
                .Width = 400
            }

        'The column1, column2 DataGridViewTextBoxColumns are being added in the list
        TextBoxColumnList.Add(column1)
        TextBoxColumnList.Add(column2)

        Dim a As Integer = 0

        Do While a < 2
            'Reads the name of the column from the datatable
            Dim ColumnName As String = ds.Tables("columnheadersdatabase").Rows(a).Item("J001").ToString
            'Searches the index of the DataGridViewTextBoxColumn from the list that has the
            'same name as the column name that was read from the datatable
            Dim ColumnIndex As Integer = GetColumnIndex(TextBoxColumnList, ColumnName)
            'Checks whether the index has been found
            If ColumnIndex <> -1 Then
                'Adds the DataGridViewTextBoxColumn in the DataGridView
                dgv.Columns.Add(TextBoxColumnList(ColumnIndex))
            End If

            a += 1
        Loop

    'End Sub

    Private Function GetColumnIndex(ByVal TextBoxColumnList As List(Of DataGridViewTextBoxColumn), ByVal ColumnName As String) As Integer
        'Checks whether the list has an object reference
        If TextBoxColumnList Is Nothing Then
            Return -1
        End If

        Dim i As Integer
        'Loops for all the items of the DataGridViewTextBoxColumn list
        For i = 0 To TextBoxColumnList.Count - 1
            'Compares the names
            If TextBoxColumnList(i).Name.ToUpper = ColumnName.ToUpper Then
                Return i
            End If
        Next

        Return -1
    End Function
'Private子按钮1\u单击(发送者作为对象,e作为事件参数)处理按钮1。单击
"测试数据,
'Dim ds作为新数据集
“Dim tb作为新数据表(“columnheadersdatabase”)
'tb.Columns.Add(“J001”)
'tb.Rows.Add(tb.NewRow)
'tb.Rows.Add(tb.NewRow)
'tb.Rows.Add(tb.NewRow)
'tb(0).项目(“J001”)=“第1列”
'tb(1).项目(“J001”)=“第2列”
“tb(2).项目(“J001”)=“第3列”
'ds.Tables.Add(tb)
'将包含所有DataGridViewTextBoxColumns的列表
Dim TextBoxColumnList作为新列表(DataGridViewTextBoxColumn的)
Dim column1作为新的DataGridViewTextBoxColumn,带有
{
.Name=“column1”,
.HeaderText=“第1列”,
.SortMode=DataGridViewColumnSortMode.NotSortable,
.宽度=200
}
Dim Column 2作为新的DataGridViewTextBoxColumn,带有
{
.Name=“column2”,
.HeaderText=“第2列”,
.SortMode=DataGridViewColumnSortMode.NotSortable,
.宽度=400
}
'列表中正在添加列1、列2 DataGridViewTextBoxColumns
TextBoxColumnList.Add(第1列)
TextBoxColumnList.Add(第2列)
将a调整为整数=0
做一个<2的人
'从datatable中读取列的名称
Dim ColumnName As String=ds.Tables(“columnheadersdatabase”).Rows(a).Item(“J001”).ToString
'从具有
'与从datatable中读取的列名相同
Dim ColumnIndex As Integer=GetColumnIndex(TextBoxColumnList,ColumnName)
'检查是否已找到索引
如果列索引为-1,则
'在DataGridView中添加DataGridViewTextBoxColumn
dgv.Columns.Add(TextBoxColumnList(ColumnIndex))
如果结束
a+=1
环
'末端接头
私有函数GetColumnIndex(ByVal TextBoxColumnList作为列表(DataGridViewTextBoxColumn的列表),ByVal ColumnName作为字符串)作为整数
'检查列表是否有对象引用
如果TextBoxColumnList为空,则
返回-1
如果结束
作为整数的Dim i
'为DataGridViewTextBoxColumn列表的所有项循环
对于i=0到TextBoxColumnList.Count-1
'比较名称
如果TextBoxColumnList(i).Name.ToUpper=ColumnName.ToUpper,则
返回i
如果结束
下一个
返回-1
端函数
'Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        'Test data
        'Dim ds As New DataSet
        'Dim tb As New DataTable("columnheadersdatabase")
        'tb.Columns.Add("J001")

        'tb.Rows.Add(tb.NewRow)
        'tb.Rows.Add(tb.NewRow)
        'tb.Rows.Add(tb.NewRow)

        'tb(0).Item("J001") = "column1"
        'tb(1).Item("J001") = "column2"
        'tb(2).Item("J001") = "column3"

        'ds.Tables.Add(tb)

        'A list that will contain all the DataGridViewTextBoxColumns
        Dim TextBoxColumnList As New List(Of DataGridViewTextBoxColumn)
        Dim column1 As New DataGridViewTextBoxColumn With
            {
                .Name = "column1",
                .HeaderText = "Column 1",
                .SortMode = DataGridViewColumnSortMode.NotSortable,
                .Width = 200
            }
        Dim column2 As New DataGridViewTextBoxColumn With
            {
                .Name = "column2",
                .HeaderText = "Column 2",
                .SortMode = DataGridViewColumnSortMode.NotSortable,
                .Width = 400
            }

        'The column1, column2 DataGridViewTextBoxColumns are being added in the list
        TextBoxColumnList.Add(column1)
        TextBoxColumnList.Add(column2)

        Dim a As Integer = 0

        Do While a < 2
            'Reads the name of the column from the datatable
            Dim ColumnName As String = ds.Tables("columnheadersdatabase").Rows(a).Item("J001").ToString
            'Searches the index of the DataGridViewTextBoxColumn from the list that has the
            'same name as the column name that was read from the datatable
            Dim ColumnIndex As Integer = GetColumnIndex(TextBoxColumnList, ColumnName)
            'Checks whether the index has been found
            If ColumnIndex <> -1 Then
                'Adds the DataGridViewTextBoxColumn in the DataGridView
                dgv.Columns.Add(TextBoxColumnList(ColumnIndex))
            End If

            a += 1
        Loop

    'End Sub

    Private Function GetColumnIndex(ByVal TextBoxColumnList As List(Of DataGridViewTextBoxColumn), ByVal ColumnName As String) As Integer
        'Checks whether the list has an object reference
        If TextBoxColumnList Is Nothing Then
            Return -1
        End If

        Dim i As Integer
        'Loops for all the items of the DataGridViewTextBoxColumn list
        For i = 0 To TextBoxColumnList.Count - 1
            'Compares the names
            If TextBoxColumnList(i).Name.ToUpper = ColumnName.ToUpper Then
                Return i
            End If
        Next

        Return -1
    End Function