2011-05-09 32 views
15

Dado un número de fila específico e índice de columna, ¿cómo puedo calcular la ubicación de la celda (IE: Location.Point) dentro de un DataGridView?Determinar la ubicación de la celda en DataGridView

La razón por la que necesito la ubicación de la celda es para que pueda colocar un botón dentro de la celda para permitir la búsqueda de carpetas (la vista de cuadrícula de datos muestra los paths de carpeta).

Sugerencias alternativas sobre cómo lograr esta bienvenida.

+2

Su idea aquí es bastante frágil. Hay mejores formas de agregar botones a las celdas en un 'DataGridView'. Las celdas pueden contener cualquier tipo de control que desee, incluidos controles personalizados. Recomiendo registrarse primero. –

+0

¿Por qué no usa DataGridViewButtonColumn? Es parte de .NET Framework. – Vale

+0

Porque lo que quiero lograr es un cuadro de texto con un botón al lado (estoy seguro de que hay una mejor manera pero no puedo resolverlo, prob heredando DataGridViewColumn). –

Respuesta

29

Realmente no se puede encontrar un punto para una celda DGV porque las celdas ocupan un área rectangular en un DGV. Sin embargo, puede encontrar esta área usando el DataGridView.GetCellDisplayRectangle() method. Devuelve un Rectangle para el área de visualización de una celda DGV dada por los índices de columnas y filas de la celda. Si realmente quiere un punto, puede usar fácilmente el Rectangle para construir Puntos para cualquiera de las cuatro esquinas del Rectangle.

// Get Rectangle for second column in second row. 
var cellRectangle = dataGridView1.GetCellDisplayRectangle(1, 1, true); 
// Can create Points using the Rectangle if you want. 
Console.WriteLine("Top Left  x:{0}\t y:{1}", cellRectangle.Left, cellRectangle.Top); 
Console.WriteLine("Bottom Right x:{0}\t y:{1}", cellRectangle.Right, cellRectangle.Bottom); 

Pero estoy de acuerdo con los comentarios de su pregunta; sería mejor crear una DataGridViewColumn personalizada y alojar allí su TextBox y Button. Here's an example de hacer esto para el control DateTimePicker:

+0

Terminé usando su sugerencia sobre la forma correcta de crear una columna. Funcionó bien ¡Gracias! –

+0

Este MSDN que proporcionó es exactamente lo que estoy buscando. – Jack

Cuestiones relacionadas