2011-08-14 21 views
5

dobrze Mam podgląd datagrid, a ja mam kolumnę, wszystko, co chcę zrobić, to kontrolować komórki w tej kolumnie, czasem zrobić to combobox, czasem textbox .... itp.Komórki DataGridview w jednej kolumnie nie mogą mieć innego typu.

Mogę sprawić, aby komórki w kolumnie miały tylko jeden typ, czy mogę utworzyć wiele komórek w jednej kolumnie?

nadzieję, że jest jasne.

Odpowiedz

7

Istnieją dwa sposoby, aby to zrobić:

  1. Rzucić DataGridViewCell do pewnego typu komórek, co istnieje. Na przykład skonwertuj typ DataGridViewTextBoxCell na DataGridViewComboBoxCell.
  2. Utwórz kontrolkę i dodaj ją do kolekcji kontrolnej DataGridView, ustaw jej lokalizację i rozmiar, aby pasowała do komórki, która ma być hostem.

Zobacz mój przykładowy kod poniżej, który ilustruje sztuczki.

private void Form5_Load(object sender, EventArgs e) 
     { 
      DataTable dt = new DataTable(); 
      dt.Columns.Add("name"); 
      for (int j = 0; j < 10; j++) 
      { 
       dt.Rows.Add(""); 
      } 
      this.dataGridView1.DataSource = dt; 
      this.dataGridView1.Columns[0].Width = 200; 

      /* 
      * First method : Convert to an existed cell type such ComboBox cell,etc 
      */ 

      DataGridViewComboBoxCell ComboBoxCell = new DataGridViewComboBoxCell(); 
      ComboBoxCell.Items.AddRange(new string[] { "aaa","bbb","ccc" }); 
      this.dataGridView1[0, 0] = ComboBoxCell; 
      this.dataGridView1[0, 0].Value = "bbb"; 

      DataGridViewTextBoxCell TextBoxCell = new DataGridViewTextBoxCell(); 
      this.dataGridView1[0, 1] = TextBoxCell; 
      this.dataGridView1[0, 1].Value = "some text"; 

      DataGridViewCheckBoxCell CheckBoxCell = new DataGridViewCheckBoxCell(); 
      CheckBoxCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter; 
      this.dataGridView1[0, 2] = CheckBoxCell; 
      this.dataGridView1[0, 2].Value = true; 

      /* 
      * Second method : Add control to the host in the cell 
      */ 
      DateTimePicker dtp = new DateTimePicker(); 
      dtp.Value = DateTime.Now.AddDays(-10); 
      //add DateTimePicker into the control collection of the DataGridView 
      this.dataGridView1.Controls.Add(dtp); 
      //set its location and size to fit the cell 
      dtp.Location = this.dataGridView1.GetCellDisplayRectangle(0, 3,true).Location; 
      dtp.Size = this.dataGridView1.GetCellDisplayRectangle(0, 3,true).Size; 
     } 

Zrobione z here

Powiązane problemy