2011-03-21 16 views
7

¿Cómo cambio las siguientes cosas de un DataGridViewComboBoxColumn en tiempo de ejecución:desactivar el tiempo de ejecución datagridviewcombobox

  1. ¿Cómo se configura el primer valor del cuadro combinado como predeterminado?
  2. Desactivar cuadro combinado/hacerlo de solo lectura mientras se muestra el primer valor como predeterminado. Es decir, si tengo 3 elementos en el cuadro combinado, debería mostrar solo el primer elemento. (Desactive el menú desplegable del cuadro combinado o cámbielo para que se convierta en un cuadro de texto en tiempo de ejecución).

Motivo:
La razón por la que hago esto es porque para mi Enum tengo Status{New=1,Stop=2,Temp=3}. Cuando quiero registrar un estudiante, el estado siempre se establece en New. Así que cuando guarde, guardará automáticamente el Status = 1.

Respuesta

8

Aquí es cómo establecer el valor predeterminado y desactivar la célula:

using System; 
using System.Windows.Forms; 

namespace WindowsFormsApplication3 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     protected override void OnLoad(EventArgs e) 
     { 
      base.OnLoad(e); 

      Column1.DataSource = new int[] { 1, 2, 3 }; 
      Column1.DataPropertyName = "Number"; 
      dataGridView1.DataSource = new[] 
      { 
       new { Number=1 }, 
       new { Number=2 }, 
       new { Number=3 }, 
       new { Number=1 } 
      }; 
     } 

     private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
     { 
      if (e.ColumnIndex == Column1.Index && e.RowIndex == (dataGridView1.Rows.Count - 1)) 
      { 
       DataGridViewComboBoxCell cell = (DataGridViewComboBoxCell)dataGridView1[e.ColumnIndex, e.RowIndex]; 

       cell.Value = 2; 
       cell.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing; 
       cell.ReadOnly = true; 
      } 
     } 
    } 
} 
+0

@Josh M .: No hay propiedades habilitadas también ((DataGridViewComboBoxColumn) dg.Columns ["Estado"]). En ... – VeecoTech

+0

¿No estamos hablando del mismo control? Este control tiene ambas propiedades que mencioné: http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcomboboxeditingcontrol.aspx –

+0

¡Oh! DataGridViewComboBoxColumn! De acuerdo, déjame revisarlo ... –

0

hay SelectedIndex para los controles DataGridView ComboBox según estos artículos:

http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.editingcontrolshowing.aspx

http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcomboboxeditingcontrol(v=vs.80).aspx

[1] Así es como lo hago:

private void dgv_EditingControlShowing(object sender, System.Windows.Forms.DataGridViewEditingControlShowingEventArgs e) 
{ 
if (e.Control is DataGridViewComboBoxEditingControl) { 


    DataGridViewComboBoxEditingControl control = e.Control as DataGridViewComboBoxEditingControl; 


    BindingSource bs = control.DataSource as BindingSource; 
    if (!IsNothing(bs)) { 

     // set the filteredChildBS as the DataSource of the editing control 
     ((ComboBox)e.Control).DataSource = filteredChildBS; 

     //Set the dgv's combobox to the first item 
     ((ComboBox)e.Control).SelectedIndex = 1 

    } 
} 

}

El filtereredChildBS es una BindingSource, que me haga saber si necesita alguna aclaración?

[2]. Deshabilitar controles de datagridview es un poco más complicado. He utilizado este ejemplo para desactivar las casillas de verificación de DataGridView: http://social.msdn.microsoft.com/forums/en-US/winformsdatacontrols/thread/988c7e3f-c172-467d-89b7-b80a60b7f24f/ pero para comboboxes una manera más fácil sería desactivar columnas bandas:

foreach (DataGridViewBand band in dgvTransactions.Columns) { if (i !=7) band.ReadOnly = (bool)i == 0;  i+= 1; band.Frozen = false; } 

Déjeme saber si usted necesita más aclaraciones?

+0

gracias por la respuesta. Pero, ¿qué es TryCast en C#? No puedo encontrar o escribir TryCast en Visualstudio Framekwork 3.5 – VeecoTech

+0

lo siento. Transmití desde VB.Net usando CodeChanger.com y rellenó el casting. En lugar de TryCast use esta sintaxis: ((ComboBox) e.Control) .SelectedIndex –

+0

¿Qué es filteredChildBS? ¿Debo cargar todo el enum en esto? – VeecoTech

Cuestiones relacionadas