Simular clic en DataGridView

05/10/2007 - 14:09 por Carlos Sancho | Informe spam
Hola a todos

¿Cómo puedo simular mediante programacion hacer clic en una fila de una
DataGridView, produciéndose todos los eventos como si fuese un clic real?

Hr probado con

this.datagridview1.Rows[mi_indice].select = true;

pero, no desencadena los eventos como un clic real, ya que este grid está
enlazado a un segundo, y este segundo grid no se mueve (y deberia hacerlo).

Gracias por cualquier sugerencia

Saludos

Preguntas similare

Leer las respuestas

#1 Luis Miguel Blanco
06/10/2007 - 11:33 | Informe spam
Hola Carlos

Para poder desencadenar un evento clic en un DataGridView en la manera que
comentas, creo que la mejor forma es crear una clase derivada de
DataGridView, escribiendo un método que haga una llamada al método
OnRowHeaderMouseClick de la clase DataGridView, el cual se encarga de
provocar el evento RowHeaderMouseClick. Dentro de tu método, deberás crear
también un objeto DataGridViewCellMouseEventArgs, que es el que contiene toda
la información de la fila en la que se ha realizado el clic, coordenadas del
cursor, etc. Algo parecido al siguiente bloque de código.

//--
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;

namespace PrimerEstilo
{
class MiDGV : DataGridView
{
public void HacerClicFila()
{
DataGridViewCellMouseEventArgs dgvEvArgs = new
DataGridViewCellMouseEventArgs(0, 4, 5, 5,
new MouseEventArgs(MouseButtons.Left, 1, 1, 1, 0));

this.OnRowHeaderMouseClick(dgvEvArgs);
}
}
}
//--

A continuación, en tu formulario, declaras una variable de tu clase heredada
de DataGridView, escribes un método manipulador del evento
RowHeaderMouseClick, y asignas dicho método manipulador al evento del
control. Todo esto entre otras tareas, como la de establecer la posición,
tamaño, etc., de tu grid.

La forma en que provoques tu evento por código depende de los requerimientos
de tu aplicación. En el siguiente código yo he añadido un botón al
formulario, que es el encargado de llamar al método HacerClicFila del grid,
que a su vez desencadena el evento RowHeaderMouseClick. Para simplificar el
ejemplo, el método HacerClicFila dispara el evento para una fila en concreto
del grid.

//--
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace PrimerEstilo
{
public partial class Form2 : Form
{
MiDGV grid;

public Form2()
{
InitializeComponent();
}

private void Form2_Load(object sender, EventArgs e)
{
grid = new MiDGV();
grid.Location = new Point(5, 50);
grid.Size = new Size(500, 300);
grid.Anchor = AnchorStyles.Left | AnchorStyles.Right |
AnchorStyles.Bottom;
grid.RowHeaderMouseClick += new
DataGridViewCellMouseEventHandler(grid_RowHeaderMouseClick);
this.Controls.Add(grid);
this.LlenarDatosGrid();
}

void grid_RowHeaderMouseClick(object sender,
DataGridViewCellMouseEventArgs e)
{
MessageBox.Show(grid.Rows[e.RowIndex].Cells[1].Value.ToString());
}

private void button1_Click(object sender, EventArgs e)
{
grid.HacerClicFila();
}

void LlenarDatosGrid()
{
SqlConnection cnConexion = new SqlConnection();
cnConexion.ConnectionString = "Data Source=localhost;" +
"Initial Catalog=AdventureWorksDW;" +
"Integrated Security=True";

string sSQL = "SELECT ProductKey, SpanishProductName, ListPrice,
EndDate, ProductLine ";
sSQL += "FROM DimProduct ";
sSQL += "WHERE ListPrice IS NOT NULL";

SqlCommand cmdComando = new SqlCommand(sSQL, cnConexion);
SqlDataAdapter daAdaptador = new SqlDataAdapter(cmdComando);
DataSet dsAdvWorks = new DataSet();

daAdaptador.Fill(dsAdvWorks, "DimProduct");

this.grid.DataSource = dsAdvWorks;
this.grid.DataMember = "DimProduct";
}
}
}
//--

Espero que te sirva de ayuda.

Un saludo
Luis Miguel Blanco
http://www.dotnetmania.com


"Carlos Sancho" wrote:

Hola a todos

¿Cómo puedo simular mediante programacion hacer clic en una fila de una
DataGridView, produciéndose todos los eventos como si fuese un clic real?

Hr probado con

this.datagridview1.Rows[mi_indice].select = true;

pero, no desencadena los eventos como un clic real, ya que este grid está
enlazado a un segundo, y este segundo grid no se mueve (y deberia hacerlo).

Gracias por cualquier sugerencia

Saludos



Respuesta Responder a este mensaje
#2 Jowie
08/10/2007 - 08:31 | Informe spam
Buenas,

Ahi te va otra sugerencia:
Para llamar a un evento lo unico que tienes que hacer es llamar al
evento con los parametros que te pida sabiendo que el primer parametro
en todos los eventos siempre es el objeto que lo lanza, es decir, si
tienes el evento:

private void dataGridView_SelectionChanged(object sender, EventArgs e)
{

}

para llamarlo tendras que pasarle como parametros el objeto
datagridview y un objeto de tipo EventArg:

EventArgs ea = new EventArgs();
this.dataGridView_SelectionChanged(this.dataGridView, ea);

El primer paremetro es el objeto que lo lanza y el segundo es el
objeto que contiene la información del evento.

Si lo que quieres es seleccionar una fila del dataGridView:

this.dataGridView.Rows[2].Cells[0].Selected = true;
this.dataGridView.Rows[2].Selected = true;

Un saludo.
Respuesta Responder a este mensaje
#3 Alfonso Palacios Guerrero
14/10/2007 - 16:17 | Informe spam
Hola creo que para lo que quieres hacer te servira esto
Declaras el evento que ha de hacerlo que quieres ej: grid_doubleClick
private void grd_articulos_DoubleClick(object sender, EventArgs e)
{
MessageBox.Show("Test");
}
Y lo llamas desde donde quieres
private void btn_add_Click(object sender, EventArgs e)
{
Invoke(new EventHandler(grd_articulos_DoubleClick));
}
"Carlos Sancho" escribió en el mensaje de
noticias news:
Hola a todos

¿Cómo puedo simular mediante programacion hacer clic en una fila de una
DataGridView, produciéndose todos los eventos como si fuese un clic real?

Hr probado con

this.datagridview1.Rows[mi_indice].select = true;

pero, no desencadena los eventos como un clic real, ya que este grid está
enlazado a un segundo, y este segundo grid no se mueve (y deberia
hacerlo).

Gracias por cualquier sugerencia

Saludos


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida