Pregunta

I pensó que esto era tan simple como en el acceso.

necesidades del usuario para ajustar el valor de una columna en una tabla de datos a 1 o 2.

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

Por otro lado, si se muestra la tabla que se muestra no 1 o 2, pero la cadena correspondiente en el cuadro combinado.

¿Cómo puedo conseguir esta tarea simple para el trabajo ??

¿Fue útil?

Solución

supongo que quería decir DataGridView, que es para Windows Forms, mientras que el GridView es para ASP.NET aunque se ha insertado en cuestión como tal.

¿Cómo está el enlace de datos a la DataGridViewComboBoxColumn? Tendrá que establecer el DisplayMember ValueMember y propiedades en la DataGridViewComboBoxColumn mientras que el establecimiento de su origen de datos. El enlace de MSDN a DisplayMember muestra un ejemplo, pero no acaba de mostrar lo que estás solicitando ya que establece las propiedades de la misma cosa.

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

En aras de un ejemplo, digamos que usted tiene una mejor elección en su proyecto que representa sus 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. Lo ideal sería tener un procedimiento de este tipo en una capa de servicio, o usted podría construir su propia lista en otro lugar si quería (detrás del código de su forma). Por simplicidad He Lumped todos juntos en la misma clase.

En el formulario que 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. Al obtener el valor seleccionado de la misma, debe ser el valor que subyace a 1 ó 2.

Esa es la idea detrás de usar DisplayMember / ValueMember. Esto debe conseguir que ir y ayudarle a adaptarse al origen de datos que estaba utilizando.

Otros consejos

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: este post

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top