es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Obtener los valores del datagrid por índice de fila para su uso posterior.

Estoy intentando obtener los valores de las celdas de una fila de un datagrid en la que hago clic y almacenarlos para usarlos más tarde, pero parece que no puedo hacerlo funcionar.

Al hacer clic en la fila, debería aparecer un menú en el que pueda elegir hacer una acción con esos valores.

Esto es lo que he logrado hasta ahora:

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs x)
{
    if (dataGridView1.Rows[x.RowIndex].Cells["Name"].Value != null) name = dataGridView1.Rows[x.RowIndex].Cells["Name"].Value.ToString();
    else if (dataGridView1.Rows[x.RowIndex].Cells["LastName"].Value != null) last = dataGridView1.Rows[x.RowIndex].Cells["LastName"].Value.ToString();
}

private void dataGridView1_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Right)
    {
        if (last != null && name != null)
        {
            ContextMenu cm = new ContextMenu();
            this.ContextMenu = cm;
            cm.MenuItems.Add(new MenuItem("Hacer algo con esos valores en esta fila", new System.EventHandler(this.do_Action_with_values)));
            cm.Show(this, new Point(e.X, e.Y));
        }
        last = null;
        name = null;
    }
}

Eliminar: if (last != null && name != null)

Hará que el menú funcione, pero los valores no se guardan, todos son nulos.

¿Existe una forma adecuada de almacenar en cadenas todos los valores de las columnas para la fila en la que se hace clic?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para almacenar adecuadamente todos los valores de columna para la fila seleccionada, se puede recorrer en bucle las columnas de la fila seleccionada y guardar cada valor en una cadena de texto o en un conjunto. Aquí hay un ejemplo:

    private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
    {
        if (e.RowIndex >= 0) // asegúrese de hacer clic en una fila válida
        {
            DataGridViewRow row = dataGridView1.Rows[e.RowIndex];
            List<string> rowValues = new List<string>(); // lista para almacenar los valores
    
            foreach (DataGridViewCell cell in row.Cells)
            {
                if (cell.Value != null) // verifique si la celda tiene un valor
                {
                    rowValues.Add(cell.Value.ToString());
                }
            }
    
            // almacenar los valores para usar más tarde
            // se pueden usar una matriz de cadena o variables individuales de cadena
            string[] valuesArray = rowValues.ToArray(); 
            string name = rowValues[0];
            string last = rowValues[1];
    
            // mostrar el menú
            ContextMenu cm = new ContextMenu();
            cm.MenuItems.Add(new MenuItem("&Hacer algo con esos valores en esta fila", do_Action_with_values));
            cm.Show(dataGridView1, dataGridView1.PointToClient(Cursor.Position));
        }
    }
    
    private void do_Action_with_values(object sender, EventArgs e)
    {
        // usa los valores de fila guardados para la acción
    }
    

    En este ejemplo, el método dataGridView1_CellClick se modifica para recorrer en bucle las celdas de la fila seleccionada y guardar sus valores en una lista. Los valores de la fila se almacenan entonces en las variables de cadena o matriz de cadena para su uso posterior. El menú se muestra en el mismo método.

    El método do_Action_with_values es donde se usarían los valores de fila guardados para la acción.

Comments are closed.