如何使左列成为datagridview中的标题 [英] How to make left column be a header in datagridview

查看:83
本文介绍了如何使左列成为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 set RowHeadersVilsible = True to set first column as row-headers ;)
DataGridView.RowHeadersVisible Property (WinForms)[^]
DataGridViewRow.HeaderCell Property (WinForms)[^]


这篇关于如何使左列成为datagridview中的标题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆