2013-03-20 2 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

+0

я забыл ООН-удалить кусок кода, который был там раньше Я загрузил его, через секунду я разобрался! –

ответ

2

Это моя первая запись, но я думаю, что это, что ты ищешь. Я тестировал его, и он работал на моем datagrid. Вы использовали ширину прямоугольника, вместо этого вам понадобится ширина столбца. Я установил заголовок столбца в 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) 
Смежные вопросы