2009-09-07 9 views
6

Pensé que esto era simple como en Access.DataGridViewComboBoxColumn nombre/valor ¿cómo?

usuario tiene que establecer el valor de una columna en una tabla de datos a 1 o 2.

quería presentar un "UNO" cuadro combinado que muestra, "dos" y ajuste 1 ó 2 detrás de la escena, como Lo hice muchas veces en Access-Forms.

Por otro lado, si se muestra la tabla, no debe mostrar 1 o 2, sino la cadena correspondiente en el ComboBox.

¿Cómo puedo hacer que funcione esta sencilla tarea?

Respuesta

12

Supongo que se refería a DataGridView, que es para Windows Forms, mientras que GridView es para ASP.NET, aunque etiquetó su pregunta como tal.

¿Cómo vincula los datos al DataGridViewComboBoxColumn? Tendrá que establecer las propiedades DisplayMember y ValueMember en DataGridViewComboBoxColumn mientras establece su DataSource. El enlace de MSDN a DisplayMember muestra un ejemplo, pero no muestra exactamente lo que está solicitando, ya que establece ambas propiedades en la misma cosa.

DisplayMember sería el texto que desea que el usuario vea, y ValueMember sería el valor subyacente oculto asociado a él.

Por el bien de un ejemplo, digamos que usted tiene una mejor elección en su proyecto que representa las selecciones y se ve así:

public class Choice 
{ 
    public string Name { get; private set; } 
    public int Value { get; private set; } 
    public Choice(string name, int value) 
    { 
     Name = name; 
     Value = value; 
    } 

    private static readonly List<Choice> possibleChoices = new List<Choice> 
    { 
     { new Choice("One", 1) }, 
     { new Choice("Two", 2) } 
    }; 

    public static List<Choice> GetChoices() 
    { 
     return possibleChoices; 
    } 
} 

GetChoices() devolverá una lista con sus opciones. Idealmente, tendría un método de este tipo en una capa de servicio, o podría crear su propia lista en otro lugar si así lo desea (en el código de su formulario detrás). Para simplificar, lo he agrupado todo en la misma clase.

En su forma se uniría a la lista de la DataGridViewComboBoxColumn de la siguiente manera:

// reference the combobox column 
DataGridViewComboBoxColumn cboBoxColumn = (DataGridViewComboBoxColumn)dataGridView1.Columns[0]; 
cboBoxColumn.DataSource = Choice.GetChoices(); 
cboBoxColumn.DisplayMember = "Name"; // the Name property in Choice class 
cboBoxColumn.ValueMember = "Value"; // ditto for the Value property 

Ahora debería ver "uno" y "dos" en el cuadro combinado. Cuando obtiene el valor seleccionado de él, debe ser el valor 1 o 2 subyacente.

Esa es la idea detrás de usar DisplayMember/ValueMember. Esto debería ayudarlo a avanzar y ayudarlo a adaptar la fuente de datos que estaba utilizando.

+0

Ésta es la respuesta perfecta! ¡Gracias Ahmad! Reinhard –

+2

¿Cómo podemos leer el valor seleccionado de una celda desplegable en la cuadrícula de datos? – Meysam

+0

¡No sabía que era así de simple! Gracias – Jack

3

Esta es la forma de leer el valor de la red cuando el valor de los cambios combobox:

dataGridView1.EditingControlShowing += dataGridView1_EditingControlShowing; 

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
{ 
    if (dataGridView1.CurrentCell.ColumnIndex == 0 && e.Control is ComboBox) 
    { 
     ComboBox comboBox = e.Control as ComboBox; 
     comboBox.SelectedIndexChanged += LastColumnComboSelectionChanged; 
    } 
} 

private void LastColumnComboSelectionChanged(object sender, EventArgs e) 
{ 
    var sendingCB = sender as DataGridViewComboBoxEditingControl; 
    object value = sendingCB.SelectedValue; 
    if (value != null) 
    { 
     int intValue = (int)sendingCB.SelectedValue; 
     //do something with value 
    } 
} 

fuentes: this post

Cuestiones relacionadas