2013-08-01 13 views
9

Po uruchomieniu mój kod, DataGridView TopLeftHeaderCell ma również combobox. Jak mogę to zmienić?Dodawanie Combobox do nagłówków DataGridView

Oto mój kod:

public void AddHeaders(DataGridView dataGridView) 
{ 

     for (int i = 0; i < 4; i++) 
     { 
      // Create a ComboBox which will be host a column's cell 
      ComboBox comboBoxHeaderCell = new ComboBox(); 
      comboBoxHeaderCell.DropDownStyle = ComboBoxStyle.DropDownList; 
      comboBoxHeaderCell.Visible = true; 

      foreach (KeyValuePair<string, string> label in _labels) 
      { 
       comboBoxHeaderCell.Items.Add(label.Key); 
      } 

      // Add the ComboBox to the header cell of the column 
      dataGridView.Controls.Add(comboBoxHeaderCell); 
      comboBoxHeaderCell.Location = dataGridView.GetCellDisplayRectangle(i, -1, true).Location; 
      comboBoxHeaderCell.Size = dataGridView.Columns[0].HeaderCell.Size; 
      comboBoxHeaderCell.Text = _labels[i].Key; 

     } 
} 

Dziękuję

Odpowiedz

1

w kodzie,

comboBoxHeaderCell.Location = dataGridView.GetCellDisplayRectangle(i, -1, true).Location; 

zawsze powróci 0,0, i do nich można umieścić ComboBox w miejscu 0,0 w DataGridView, i dlatego widzimy to

enter image description here

można użyć dataGridView1[i,0].size do wielkości potrzebnej

szukam lokalizacji

nie mogłem znaleźć, ale co można zrobić to za pomocą dataGridView1.Width - dataGridView1[1,0].Size.Width można użyć szerokość i usuń rozmiar całej szerokości nagłówków, a następnie dodaj je jeden po drugim.

int xPos = dataGridView1.Width; 

for (int i = 0; i < 4; i++) 
{ 
    xPos -= dataGridView1[i, 0].Size.Width; 
} 
... 
comboBoxHeaderCell.Size = dataGridView.Columns[0].HeaderCell.Size; 
comboBoxHeaderCell.Location = new Point(xPos, 0); 
xPos += comboBoxHeaderCell.Size.Width; 
+0

A rozwiązanie? OP wydaje się chcieć dodać każdy list kontrolny do każdego nagłówka kolumny, a nie tylko wyjaśnić, dlaczego jego kod nie działa. –

+0

Nie mam rozwiązania, ponieważ nadal nie wiem, dlaczego to zrobi. jeśli on wytłumaczy, co chciał zrobić, będę mógł pomóc –

+0

Potrzebuję combobox dla każdego nagłówka w kolumnach, poza topLeftHeaderCell – user2576562

0
public void AddHeaders(DataGridView dataGridView) 
{ 

    for (int i = 0; i < 4; i++) 
    { 
     // Create a ComboBox which will be host a column's cell 
     DataGridViewComboBoxCell comboBoxHeaderCell = new DataGridViewComboBoxCell();   


     foreach (KeyValuePair<string, string> label in _labels) 
     { 
      comboBoxHeaderCell.Items.Add(label.Key); 
     } 

     // Add the ComboBox to the header cell of the column 
     dataGridView[i, 0] = comboBoxHeaderCell; 
     comboBoxHeaderCell.Value =_labels[i].Key; 


    } 
} 

spróbuj to będzie rozwiązać problem, usunąłem te linie nie są one obowiązkowe, aby zachować jak domyślnie będzie to widoczne ... i domyślnie zajmie rozmiar komórek ...

+0

Mam błąd mówiąc, że indeks DataGridViewCell.Visible, DataGridViewCell.Size, DataGridViewCell.Test, nie jest przypisany, jest w trybie tylko do odczytu – user2576562

Powiązane problemy