Datagrid Winforms

30/06/2004 - 11:09 por Anonimo | Informe spam
Hola señores.

Espero que alguien pueda ayudarme.

Tengo un DataGrid que cargo con una serie de filas de
BBDD.

Bien, el caso que cuando cargo un formulario que contiene
un datagrid, aparecen digamos una fila para las columnas
(los nombres de las columnas) y después todas las filas
(los datos)

A la izquierda de las filas aparece una columna en gris,
con una especie de flechita.

Si pulso el ratón sobre una fila, la fila se destaca con
un color azul, indicando la fila activa supongo.

Si luego tecleo la tecla flecha ABAJO, la flechita
aparecería en la siguiente fila, pero el color azul no
destaca la fila, desaparece y cuando pulso sobre una fila
vuelve a destacarse la fila con ese color azul.

Alguien sabe cómo puedo hacer que en el momento que la
flechita de la izquierda vaya pasando de una fila a otra,
la fila en la que esté la flechita, aparezca destacada
con ese color azul ?.

Un saludo foreros.

Preguntas similare

Leer las respuestas

#1 Yachakuq
30/06/2004 - 15:28 | Informe spam
Hola foreros:
Creas tu propio DataGrid personalizado, de esta manera:
using...
namespace ClasesPropias
{
#region DataGrid
/// <summary>
/// Representa un control de DataGrid de Windows
personalizado.
/// </summary>
public class MiDataGrid :
System.Windows.Forms.DataGrid
{
#region Override
protected override void WndProc(ref
Message m)
{
if (m.Msg == 0x0201 || m.Msg ==
0x0203)
{
int X = (int)m.LParam >>
16;
int Y = (int)m.LParam &
0xffff;
int T = this.GetCellBounds
(this.CurrentCell).Top;
int H = this.GetCellBounds
(this.CurrentCell).Height;
int L = this.GetCellBounds
(this.CurrentCell).Left;
int W = this.GetCellBounds
(this.CurrentCell).Width;
if ((X >= T && X <= T +
H ) && (Y >= L && Y <= L + W))
return;
}
base.WndProc(ref m);
}

protected override void
OnCurrentCellChanged(EventArgs e)
{
this.SeleccionarFila
(this.CurrentCell);
base.OnCurrentCellChanged(e);
}
#endregion Override

#region Métodos
/// <summary>
/// Selecciona la fila de donde se
encuentra la celda especificada.
/// </summary>
/// <param name="celda">Celda del fila a
selecionar.</param>
public void SeleccionarFila(DataGridCell
celda)
{
Int32 lParam = ConvertirLParam
(this.GetCellBounds(celda).Top, 5);
Win32API.SendMessage(this.Handle,
0x0201, 0, lParam);
Win32API.SendMessage(this.Handle,
0x0202, 0, lParam);
}

/// <summary>
/// Convierte un punto superior izquierdo
a valor LParam para enviar mensaje.
/// </summary>
/// <param name="Top">Punto superior para
convertir.</param>
/// <param name="Left">Punto izquierdo
para convertir.</param>
/// <returns>Retorna valor
LParam.</returns>
private static int ConvertirLParam(int
Top, int Left)
{
return (Top << 16) | (Left &
0xffff);
}
#endregion Métodos
}
#endregion DataGrid
}
y luego en el formulario reemplazas
System.Windows.Forms.DataGrid por ClasesPropias.MiDataGrid
(2 veces).
Saludos.
Yachakuq
Hola señores.

Espero que alguien pueda ayudarme.

Tengo un DataGrid que cargo con una serie de filas de
BBDD.

Bien, el caso que cuando cargo un formulario que contiene
un datagrid, aparecen digamos una fila para las columnas
(los nombres de las columnas) y después todas las filas
(los datos)

A la izquierda de las filas aparece una columna en gris,
con una especie de flechita.

Si pulso el ratón sobre una fila, la fila se destaca con
un color azul, indicando la fila activa supongo.

Si luego tecleo la tecla flecha ABAJO, la flechita
aparecería en la siguiente fila, pero el color azul no
destaca la fila, desaparece y cuando pulso sobre una fila
vuelve a destacarse la fila con ese color azul.

Alguien sabe cómo puedo hacer que en el momento que la
flechita de la izquierda vaya pasando de una fila a otra,
la fila en la que esté la flechita, aparezca destacada
con ese color azul ?.

Un saludo foreros.
.

Respuesta Responder a este mensaje
#2 Anonimo
01/07/2004 - 08:52 | Informe spam
Conoces más controles de los que pueda ampliar
funcionalidad ? Alguna referencia web ?

Hola foreros:
Creas tu propio DataGrid personalizado, de esta manera:
using...
namespace ClasesPropias
{
#region DataGrid
/// <summary>
/// Representa un control de DataGrid de Windows
personalizado.
/// </summary>
public class MiDataGrid :
System.Windows.Forms.DataGrid
{
#region Override
protected override void WndProc(ref
Message m)
{
if (m.Msg == 0x0201 || m.Msg ==
0x0203)
{
int X = (int)m.LParam >>
16;
int Y = (int)m.LParam &
0xffff;
int T = this.GetCellBounds
(this.CurrentCell).Top;
int H = this.GetCellBounds
(this.CurrentCell).Height;
int L = this.GetCellBounds
(this.CurrentCell).Left;
int W = this.GetCellBounds
(this.CurrentCell).Width;
if ((X >= T && X <= T +
H ) && (Y >= L && Y <= L + W))
return;
}
base.WndProc(ref m);
}

protected override void
OnCurrentCellChanged(EventArgs e)
{
this.SeleccionarFila
(this.CurrentCell);
base.OnCurrentCellChanged(e);
}
#endregion Override

#region Métodos
/// <summary>
/// Selecciona la fila de donde se
encuentra la celda especificada.
/// </summary>
/// <param name="celda">Celda del fila a
selecionar.</param>
public void SeleccionarFila(DataGridCell
celda)
{
Int32 lParam = ConvertirLParam
(this.GetCellBounds(celda).Top, 5);
Win32API.SendMessage(this.Handle,
0x0201, 0, lParam);
Win32API.SendMessage(this.Handle,
0x0202, 0, lParam);
}

/// <summary>
/// Convierte un punto superior izquierdo
a valor LParam para enviar mensaje.
/// </summary>
/// <param name="Top">Punto superior para
convertir.</param>
/// <param name="Left">Punto izquierdo
para convertir.</param>
/// <returns>Retorna valor
LParam.</returns>
private static int ConvertirLParam(int
Top, int Left)
{
return (Top << 16) | (Left &
0xffff);
}
#endregion Métodos
}
#endregion DataGrid
}
y luego en el formulario reemplazas
System.Windows.Forms.DataGrid por


ClasesPropias.MiDataGrid
(2 veces).
Saludos.
Yachakuq
Hola señores.

Espero que alguien pueda ayudarme.

Tengo un DataGrid que cargo con una serie de filas de
BBDD.

Bien, el caso que cuando cargo un formulario que




contiene
un datagrid, aparecen digamos una fila para las




columnas
(los nombres de las columnas) y después todas las filas
(los datos)

A la izquierda de las filas aparece una columna en




gris,
con una especie de flechita.

Si pulso el ratón sobre una fila, la fila se destaca




con
un color azul, indicando la fila activa supongo.

Si luego tecleo la tecla flecha ABAJO, la flechita
aparecería en la siguiente fila, pero el color azul no
destaca la fila, desaparece y cuando pulso sobre una




fila
vuelve a destacarse la fila con ese color azul.

Alguien sabe cómo puedo hacer que en el momento que la
flechita de la izquierda vaya pasando de una fila a




otra,
la fila en la que esté la flechita, aparezca destacada
con ese color azul ?.

Un saludo foreros.
.



.

Respuesta Responder a este mensaje
#3 Anonimo
01/07/2004 - 10:07 | Informe spam
Gracias por la respuesta.

Ahora quisiera preguntar qué es

Win32API.SendMessage ?

Win32API cómo lo declaro ?

Saludos cordiales
Hola foreros:
Creas tu propio DataGrid personalizado, de esta manera:
using...
namespace ClasesPropias
{
#region DataGrid
/// <summary>
/// Representa un control de DataGrid de Windows
personalizado.
/// </summary>
public class MiDataGrid :
System.Windows.Forms.DataGrid
{
#region Override
protected override void WndProc(ref
Message m)
{
if (m.Msg == 0x0201 || m.Msg ==
0x0203)
{
int X = (int)m.LParam >>
16;
int Y = (int)m.LParam &
0xffff;
int T = this.GetCellBounds
(this.CurrentCell).Top;
int H = this.GetCellBounds
(this.CurrentCell).Height;
int L = this.GetCellBounds
(this.CurrentCell).Left;
int W = this.GetCellBounds
(this.CurrentCell).Width;
if ((X >= T && X <= T +
H ) && (Y >= L && Y <= L + W))
return;
}
base.WndProc(ref m);
}

protected override void
OnCurrentCellChanged(EventArgs e)
{
this.SeleccionarFila
(this.CurrentCell);
base.OnCurrentCellChanged(e);
}
#endregion Override

#region Métodos
/// <summary>
/// Selecciona la fila de donde se
encuentra la celda especificada.
/// </summary>
/// <param name="celda">Celda del fila a
selecionar.</param>
public void SeleccionarFila(DataGridCell
celda)
{
Int32 lParam = ConvertirLParam
(this.GetCellBounds(celda).Top, 5);
Win32API.SendMessage(this.Handle,
0x0201, 0, lParam);
Win32API.SendMessage(this.Handle,
0x0202, 0, lParam);
}

/// <summary>
/// Convierte un punto superior izquierdo
a valor LParam para enviar mensaje.
/// </summary>
/// <param name="Top">Punto superior para
convertir.</param>
/// <param name="Left">Punto izquierdo
para convertir.</param>
/// <returns>Retorna valor
LParam.</returns>
private static int ConvertirLParam(int
Top, int Left)
{
return (Top << 16) | (Left &
0xffff);
}
#endregion Métodos
}
#endregion DataGrid
}
y luego en el formulario reemplazas
System.Windows.Forms.DataGrid por


ClasesPropias.MiDataGrid
(2 veces).
Saludos.
Yachakuq
Hola señores.

Espero que alguien pueda ayudarme.

Tengo un DataGrid que cargo con una serie de filas de
BBDD.

Bien, el caso que cuando cargo un formulario que




contiene
un datagrid, aparecen digamos una fila para las




columnas
(los nombres de las columnas) y después todas las filas
(los datos)

A la izquierda de las filas aparece una columna en




gris,
con una especie de flechita.

Si pulso el ratón sobre una fila, la fila se destaca




con
un color azul, indicando la fila activa supongo.

Si luego tecleo la tecla flecha ABAJO, la flechita
aparecería en la siguiente fila, pero el color azul no
destaca la fila, desaparece y cuando pulso sobre una




fila
vuelve a destacarse la fila con ese color azul.

Alguien sabe cómo puedo hacer que en el momento que la
flechita de la izquierda vaya pasando de una fila a




otra,
la fila en la que esté la flechita, aparezca destacada
con ese color azul ?.

Un saludo foreros.
.



.

Respuesta Responder a este mensaje
#4 Anonimo
01/07/2004 - 14:42 | Informe spam
Hola

He probado el código y lo que hace es que cuando tecleo
flecha abajo se selecciona solo la celda de la fila
actual y no la fila completa, alguna solución ?

Saludos y graciasssss


Hola foreros:
Creas tu propio DataGrid personalizado, de esta manera:
using...
namespace ClasesPropias
{
#region DataGrid
/// <summary>
/// Representa un control de DataGrid de Windows
personalizado.
/// </summary>
public class MiDataGrid :
System.Windows.Forms.DataGrid
{
#region Override
protected override void WndProc(ref
Message m)
{
if (m.Msg == 0x0201 || m.Msg ==
0x0203)
{
int X = (int)m.LParam >>
16;
int Y = (int)m.LParam &
0xffff;
int T = this.GetCellBounds
(this.CurrentCell).Top;
int H = this.GetCellBounds
(this.CurrentCell).Height;
int L = this.GetCellBounds
(this.CurrentCell).Left;
int W = this.GetCellBounds
(this.CurrentCell).Width;
if ((X >= T && X <= T +
H ) && (Y >= L && Y <= L + W))
return;
}
base.WndProc(ref m);
}

protected override void
OnCurrentCellChanged(EventArgs e)
{
this.SeleccionarFila
(this.CurrentCell);
base.OnCurrentCellChanged(e);
}
#endregion Override

#region Métodos
/// <summary>
/// Selecciona la fila de donde se
encuentra la celda especificada.
/// </summary>
/// <param name="celda">Celda del fila a
selecionar.</param>
public void SeleccionarFila(DataGridCell
celda)
{
Int32 lParam = ConvertirLParam
(this.GetCellBounds(celda).Top, 5);
Win32API.SendMessage(this.Handle,
0x0201, 0, lParam);
Win32API.SendMessage(this.Handle,
0x0202, 0, lParam);
}

/// <summary>
/// Convierte un punto superior izquierdo
a valor LParam para enviar mensaje.
/// </summary>
/// <param name="Top">Punto superior para
convertir.</param>
/// <param name="Left">Punto izquierdo
para convertir.</param>
/// <returns>Retorna valor
LParam.</returns>
private static int ConvertirLParam(int
Top, int Left)
{
return (Top << 16) | (Left &
0xffff);
}
#endregion Métodos
}
#endregion DataGrid
}
y luego en el formulario reemplazas
System.Windows.Forms.DataGrid por


ClasesPropias.MiDataGrid
(2 veces).
Saludos.
Yachakuq
Hola señores.

Espero que alguien pueda ayudarme.

Tengo un DataGrid que cargo con una serie de filas de
BBDD.

Bien, el caso que cuando cargo un formulario que




contiene
un datagrid, aparecen digamos una fila para las




columnas
(los nombres de las columnas) y después todas las filas
(los datos)

A la izquierda de las filas aparece una columna en




gris,
con una especie de flechita.

Si pulso el ratón sobre una fila, la fila se destaca




con
un color azul, indicando la fila activa supongo.

Si luego tecleo la tecla flecha ABAJO, la flechita
aparecería en la siguiente fila, pero el color azul no
destaca la fila, desaparece y cuando pulso sobre una




fila
vuelve a destacarse la fila con ese color azul.

Alguien sabe cómo puedo hacer que en el momento que la
flechita de la izquierda vaya pasando de una fila a




otra,
la fila en la que esté la flechita, aparezca destacada
con ese color azul ?.

Un saludo foreros.
.



.

Respuesta Responder a este mensaje
#5 Yachakuq
01/07/2004 - 16:24 | Informe spam
Hola:
Estas direcciones te pueden servir:
http://www.codeproject.com
http://www.syncfusion.com/FAQ/WinForms
A mí me funciona bien.
Es una función API, y la declaras así:
using ...
namespace ClasesPropias
{
public class Win32API
{
/// <summary>
/// Enviar un mensaje específico a una ventana o ventanas.
/// </summary>
/// <param name="hWnd">Puntero identificador de la
ventana.</param>
/// <param name="msg">Mensaje a enviar.</param>
/// <param name="wParam">Información específica de
mensaje.</param>
/// <param name="lParam">Información específica de
mensaje.</param>
/// <returns></returns>
[DllImport("User32.dll", EntryPoint = "SendMessage")]
public static extern bool SendMessage(IntPtr hWnd, Int32
msg, Int32 wParam, Int32 lParam);
}
}
Saludos.
Yachakuq

Gracias por la respuesta.

Ahora quisiera preguntar qué es

Win32API.SendMessage ?

Win32API cómo lo declaro ?

Saludos cordiales
Hola foreros:
Creas tu propio DataGrid personalizado, de esta manera:
using...
namespace ClasesPropias
{
#region DataGrid
/// <summary>
/// Representa un control de DataGrid de Windows
personalizado.
/// </summary>
public class MiDataGrid :
System.Windows.Forms.DataGrid
{
#region Override
protected override void WndProc(ref
Message m)
{
if (m.Msg == 0x0201 || m.Msg ==
0x0203)
{
int X = (int)m.LParam >>
16;
int Y = (int)m.LParam &
0xffff;
int T = this.GetCellBounds
(this.CurrentCell).Top;
int H = this.GetCellBounds
(this.CurrentCell).Height;
int L = this.GetCellBounds
(this.CurrentCell).Left;
int W = this.GetCellBounds
(this.CurrentCell).Width;
if ((X >= T && X <= T +
H ) && (Y >= L && Y <= L + W))
return;
}
base.WndProc(ref m);
}

protected override void
OnCurrentCellChanged(EventArgs e)
{
this.SeleccionarFila
(this.CurrentCell);
base.OnCurrentCellChanged(e);
}
#endregion Override

#region Métodos
/// <summary>
/// Selecciona la fila de donde se
encuentra la celda especificada.
/// </summary>
/// <param name="celda">Celda del fila a
selecionar.</param>
public void SeleccionarFila(DataGridCell
celda)
{
Int32 lParam = ConvertirLParam
(this.GetCellBounds(celda).Top, 5);
Win32API.SendMessage(this.Handle,
0x0201, 0, lParam);
Win32API.SendMessage(this.Handle,
0x0202, 0, lParam);
}

/// <summary>
/// Convierte un punto superior izquierdo
a valor LParam para enviar mensaje.
/// </summary>
/// <param name="Top">Punto superior para
convertir.</param>
/// <param name="Left">Punto izquierdo
para convertir.</param>
/// <returns>Retorna valor
LParam.</returns>
private static int ConvertirLParam(int
Top, int Left)
{
return (Top << 16) | (Left &
0xffff);
}
#endregion Métodos
}
#endregion DataGrid
}
y luego en el formulario reemplazas
System.Windows.Forms.DataGrid por


ClasesPropias.MiDataGrid
(2 veces).
Saludos.
Yachakuq
Hola señores.

Espero que alguien pueda ayudarme.

Tengo un DataGrid que cargo con una serie de filas de
BBDD.

Bien, el caso que cuando cargo un formulario que




contiene
un datagrid, aparecen digamos una fila para las




columnas
(los nombres de las columnas) y después todas las filas
(los datos)

A la izquierda de las filas aparece una columna en




gris,
con una especie de flechita.

Si pulso el ratón sobre una fila, la fila se destaca




con
un color azul, indicando la fila activa supongo.

Si luego tecleo la tecla flecha ABAJO, la flechita
aparecería en la siguiente fila, pero el color azul no
destaca la fila, desaparece y cuando pulso sobre una




fila
vuelve a destacarse la fila con ese color azul.

Alguien sabe cómo puedo hacer que en el momento que la
flechita de la izquierda vaya pasando de una fila a




otra,
la fila en la que esté la flechita, aparezca destacada
con ese color azul ?.

Un saludo foreros.
.



.



.

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