2013-03-20 91 views
2

我试图添加一个复选框到特定的datagridview列标题,我发现一些代码联机帮助,但它没有正确对齐,我真的不知道如何解决它。添加复选框到datagridview列标题,没有正确对齐

下面是问题和代码的形象,任何帮助将不胜感激!

P.S.我认为这可能是与物业有关,但我已经与他们玩过,但没有成功。

enter image description here

Private checkboxHeader231 As CheckBox 
Private Sub show_chkBox() 
Dim rect As Rectangle = DataGridView1.GetCellDisplayRectangle(columnIndexOfCheckBox, -1, True) 
' set checkbox header to center of header cell. +1 pixel to position 
rect.Y = 3 
rect.X = rect.Location.X + 8 + (rect.Width/4) 
checkboxHeader231 = New CheckBox() 
With checkboxHeader231 
    .BackColor = Color.Transparent 
End With 

checkboxHeader231.Name = "checkboxHeader1" 
checkboxHeader231.Size = New Size(18, 18) 
checkboxHeader231.Location = rect.Location 
AddHandler checkboxHeader231.CheckedChanged, AddressOf checkboxHeader231_CheckedChanged 
DataGridView1.Controls.Add(checkboxHeader231) 
End Sub 

Private Sub checkboxHeader231_CheckedChanged(sender As System.Object, e As System.EventArgs) 
Dim headerBox As CheckBox = DirectCast(DataGridView1.Controls.Find("checkboxHeader1", True)(0), CheckBox) 
For Each row As DataGridViewRow In DataGridView1.Rows 
    row.Cells(columnIndexOfCheckBox).Value = headerBox.Checked 
Next 
End Sub 
+0

这是什么评论“”设置复选框头头单元格的中心+1像素定位@ – DevelopmentIsMyPassion 2013-03-20 21:52:24

+0

我忘了取消删除的代码段,这是有前我上传了一秒,我将它整理出来! – 2013-03-20 22:18:38

回答

2

这是我的第一个项目,但我觉得这是您所渴望的。我测试了它,它在我的数据网格上工作。您正在使用矩形的宽度,而不是您需要的宽度。我将列标题设置为4,但是您会将4替换为您想要使用的列,我用两种方式放置它,一种放在四个循环中,另一种放在单线上。告诉我,如果这个为你工作:

Dim rect As Rectangle = DataGridView1.GetCellDisplayRectangle(4, -1, True) ' replace 4 
     rect.Y = 3 

     Dim sum = DataGridView1.Columns(0).Width 

     'for this area write a for loop to find the width of each column except for the last line which you manually do 
     ' 
     ' 
     'For i As Integer = 1 To 4 - 1 Step 1 ' replace 4 
     'sum = sum + DataGridView1.Columns(i).Width 
     'Next 

     sum = sum + DataGridView1.Columns(1).Width 
     sum = sum + DataGridView1.Columns(2).Width 
     sum = sum + DataGridView1.Columns(3).Width 
     ' stop here and add the last line by hand here 

     sum = sum + (DataGridView1.Columns(4).Width/2) + 35 ' used in both cases ' replace 4 
     rect.X = sum 

     checkboxHeader231 = New CheckBox() 
     With checkboxHeader231 
      .BackColor = Color.Transparent 
     End With 

     checkboxHeader231.Name = "checkboxHeader1" 
     checkboxHeader231.Size = New Size(18, 18) 
     checkboxHeader231.Location = rect.Location 
     AddHandler checkboxHeader231.CheckedChanged, AddressOf checkboxHeader231_CheckedChanged 
     DataGridView1.Controls.Add(checkboxHeader231)