2011-08-14 24 views
5

, así que tengo una vista de cuadrícula de datos, y tengo una columna, todo lo que quiero hacer es controlar las celdas de esta columna, algunas veces lo hago combobox, a veces textBox .... etc.Las celdas DataGridview de una columna no pueden tener un tipo diferente

Puedo hacer que las celdas de una columna tengan solo un tipo, ¿puedo hacer que muchas celdas tipeen en una columna?

espero que esté claro.

Respuesta

7

Hay dos maneras de hacer esto:

  1. moldeada una DataGridViewCell a un determinado tipo de célula que existe. Por ejemplo, convierta un DataGridViewTextBoxCell al tipo DataGridViewComboBoxCell.
  2. Cree un control y agréguelo a la colección de controles de DataGridView, establezca su ubicación y tamaño para que se ajuste a la celda que será el host.

Ver mi código de ejemplo siguiente, que ilustra los trucos.

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; 
     } 

Tomado de here

Cuestiones relacionadas