Я ищу способ сделать мой первый столбец в моем datagridview заголовком

Итак, у меня есть набор данных, который извлекает определенные ячейки из файла Excel и заполняет столбец таблицы данных. Однако ячейки, которые я извлекаю, действительно должны быть заголовками, а не обычными столбцами в сетке данных. Так есть ли простой способ превратить этот столбец данных в текст заголовка? Чтобы помочь в разработке, я предоставил код ниже, включая комментарии.

' The following lines specify the exact cells I with to pull from the excel file and populates the first column of the datagridview

MyCommand1 = New OleDbDataAdapter("Select * from [myWorksheet$A15:B21]", MyConnection)


'Here is my dataset'
    ds1 = New System.Data.DataSet()
DataGridView1.DataSource = ds1.Tables(0).DefaultView
'So at this point I have a datagridview with a column of data from the exact cells 
' from the excel file that I want


'This last part is code I found on MSDN which will hide the column headers and will turn the first column into headertext. Essentially it is adding an additional column to the left and turning that into headertext. 

Private Sub DataGridView8_CellPainting(sender As Object, e As DataGridViewCellPaintingEventArgs) Handles DataGridView8.CellPainting
    Dim rowNumber As Integer = 1

    For Each row As DataGridViewRow In DataGridView8.Rows
        If row.IsNewRow Then Continue For
        row.HeaderCell.Value = "Row " & rowNumber
        rowNumber = rowNumber + 1
    Next
    DataGridView8.AutoResizeRowHeadersWidth( _
        DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders)
End Sub

'If anyone can find out a way for me to make the first column headertext it would make my day. 

3 ответа

Просто идея..

Dim tblXls as DataTable = ds1.Tables(0) '---> this is your table
Dim tblNew as New Datatable
Dim dc as DataColumn

For x as Integer = 0 to tblXls.Rows.Count -1
    dc = New DataColumn
    dc.DataType = System.Type.GetType("System.DateTime")
    dc.ColumnName = tblXls.Rows(x).Item(0)
    tblNew.Columns.Add(dc)
Next

Затем установите tblNew в качестве источника данных DGV.

DataGridView.Datasource = tblNew

Это только готовит заголовок.. остальное вы знаете..

Вы можете заполнить заголовок строки в событии CellFormatting:

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    Dim SQL As String = "SELECT [ZIP], [Place] FROM [City_2]"
    dgv1.DataSource = Gen.GetDataView(SQL) ' load the datasource here
    dgv1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells)
    dgv1.Columns(0).Visible = False ' contains same as row header
    dgv1.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders
End Sub

Private Sub dgv1_CellFormatting(sender As Object, e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles dgv1.CellFormatting
    dgv1.Rows(e.RowIndex).HeaderCell.Value = dgv1.Rows(e.RowIndex).Cells(0).Value
End Sub

Не очень уверен, но изменение вашего соединения String может сделать работу за вас.

connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Test.xlsx;Extended Properties=" + Convert.ToChar(34).ToString() + "Excel 12.0;HDR=Yes;IMEX=2" + Convert.ToChar(34).ToString() + ""

В коде выше HDR представляет заголовки. Задавать HDR = Yes показать первый ряд в качестве заголовков и HDR = No показывать первый ряд как обычные ряды.

Вы можете получить больше информации Получить данные из MS Excel в asp.net

Другие вопросы по тегам