如何使左列成为datagridview中的标题 [英] How to make left column be a header in datagridview
问题描述
我正在尝试将datagridview的整个左列更改为headercell。现在我有一个程序使用oledataadapter从excel文件中提取数据,并允许我修改datagridview中的数据并将其保存回excel文件。但是,我的一个工作表左侧有标题,右侧列有数据。到目前为止,这是我的代码。
I'm trying to change the entire left column of a datagridview to a headercell. Right now I have a program that pulls data from an excel file using the oledataadapter and lets me modify the data in the datagridview and save it back to the excel file. However one of my worksheets has the headers on the left and the data on the column to the right. Here is my code so far.
' The following lines specify the exact cells I with to pull from the excel file and populates the first column of the datagridview
MyCommand11 = New OleDbDataAdapter("Select * from [myWorksheet$A15:B21]", MyConnection)
ds11 = New System.Data.DataSet()
DataGridView8.DataSource = ds11.Tables(0).DefaultView
'I found this code on MSDN, it turns the first column into a header, which is what I want. 'However I'm having trouble filling these headers with my data.
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
推荐答案
A15:B21],MyConnection)
ds11 =新系统.Data.DataSet()
A15:B21]", MyConnection) ds11 = New System.Data.DataSet()
DataGridView8.DataSource = ds11.Tables(0).DefaultView
'I found this code on MSDN, it turns the first column into a header, which is what I want. 'However I'm having trouble filling these headers with my data.
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
这是一种伪造DataGridView来做我认为你想做的事情的方法。从一个新的WinForm项目开始,并向表单添加一个dgv。然后将其添加到Form1.vb代码中。
Here is a way to fake the DataGridView into doing what I think you want to do. Start with a new WinForm project and add a dgv to the form. Then add this to the Form1.vb code.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' make some data to show
Dim dt As New DataTable()
With dt
.Columns.Add("Header", GetType(String))
.Columns.Add("C1", GetType(Int32))
.Columns.Add("C2", GetType(Int32))
.Rows.Add(New Object() {"A", 2, 3})
.Rows.Add(New Object() {"B", 4, 5})
.Rows.Add(New Object() {"C", 6, 7})
End With
' Setup the DGV to use the "Header" column as the row header
With DataGridView1
.DataSource = dt
.AllowUserToAddRows = False
.RowHeadersVisible = True
.Columns("Header").Visible = False ' hide the header column
.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders
End With
End Sub
Private Sub DataGridView1_RowPrePaint(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewRowPrePaintEventArgs) Handles DataGridView1.RowPrePaint
' sorting clears the headertext, so set before each row paint
DataGridView1.Rows(e.RowIndex).HeaderCell.Value = DataGridView1.Rows(e.RowIndex).Cells("Header").Value
End Sub
** **编辑:
经过多思考后,这可能是一种更好的方法,具体取决于你想要完成的事情。
****
After thinking it over a bit, this may be a better approach depending on what you are trying to accomplish.
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' make some data to show
Dim dt As New DataTable()
With dt
.Columns.Add("Header", GetType(String))
.Columns.Add("C1", GetType(Int32))
.Columns.Add("C2", GetType(Int32))
.Columns.Add("C3", GetType(Int32))
.Rows.Add(New Object() {"A", 2, 3, 7})
.Rows.Add(New Object() {"B", 4, 5, 8})
.Rows.Add(New Object() {"C", 6, 7, 2})
End With
DataGridView1.DataSource = dt.DefaultView
Dim NumColToFreeze As Int32 = 2
With DataGridView1
.RowHeadersVisible = True
For i As Int32 = 0 To NumColToFreeze - 1
.Columns(i).Frozen = True ' prevents column from scrolling out of view
.Columns(i).DefaultCellStyle = .RowHeadersDefaultCellStyle ' make it look like a header
.Columns(i).ReadOnly = True
Next
End With
End Sub
End Class
请参考以下内容:
WebControls < br $>
===========
GridView.RowHeaderColumn属性(WebControls) [ ^ ]
WinForms
======= =
您需要设置RowHeadersVilsible = True
将第一列设置为行标题;)
DataGridView.RowHeadersVisible属性(WinForms) [ ^ ]
DataGridViewRow.HeaderCell属性(WinForms) [ ^ ]
Please, refer these:
WebControls
===========
GridView.RowHeaderColumn Property (WebControls)[^]
WinForms
========
You need to setRowHeadersVilsible = True
to set first column as row-headers ;)
DataGridView.RowHeadersVisible Property (WinForms)[^]
DataGridViewRow.HeaderCell Property (WinForms)[^]
这篇关于如何使左列成为datagridview中的标题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!