PROBLEMA CON DATAGRID

09/06/2006 - 19:51 por Jesús M.I | Informe spam
Muy buenas tardes amigos del foro.

Se me presenta un problema y ya como ultisimo recurso vengo y os pregunto a
todos es lo siguiente, kiero controlar aún más mi aplicación
restringiendo en el datagrid, que el usuario no pueda modificcar el ancho de
los campos, ya q me yo me creo mi propio estilo de mi tabla etc... pero o
consigo controlar q este fijo, que el usuario no me modifique la anchura q le
doy es decir.. el usuario me deforma el datagrid como quiere...

Podeis ayudarme? muchas gracias a todos.

Preguntas similare

Leer las respuestas

#1 Jesús M.I
09/06/2006 - 19:53 | Informe spam
Perdon no lo mencione es en vb.net 2003

"Jesús M.I" escribió:

Muy buenas tardes amigos del foro.

Se me presenta un problema y ya como ultisimo recurso vengo y os pregunto a
todos es lo siguiente, kiero controlar aún más mi aplicación
restringiendo en el datagrid, que el usuario no pueda modificcar el ancho de
los campos, ya q me yo me creo mi propio estilo de mi tabla etc... pero o
consigo controlar q este fijo, que el usuario no me modifique la anchura q le
doy es decir.. el usuario me deforma el datagrid como quiere...

Podeis ayudarme? muchas gracias a todos.
Respuesta Responder a este mensaje
#2 Luis Miguel Blanco
12/06/2006 - 19:00 | Informe spam
Hola Jesús M.I.

Si necesitas bloquear o congelar el ancho de las columnas en un datagrid
puedes crear una columna de estilo personalizada que herede de la clase
DataGridTextBoxColumn, y en ella codificas el evento WidthChanged que se
produce cada vez que el usuario intenta cambiar el ancho de la columna,
obligando a que el ancho quede a un tamaño que establezcas en dicho
manipulador de evento.

Esta clase derivada DataGridTextBoxColumn deberás utilizarla en un estilo
(objeto DataGridTableStyle) que aplicarás al datagrid, creando tantos objetos
de tu clase personalizada como columnas quieras dejar con el ancho fijo.

A continuación te acompaño un bloque de código con un ejemplo de este
bloqueo para el ancho de las columnas:

'/////////////////////////////////
Imports System.Data.SqlClient

Public Class Form1
Inherits System.Windows.Forms.Form

Private oConnection As SqlConnection
Private oDataAdapter As SqlDataAdapter
Private oDataSet As DataSet

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
oConnection = New
SqlConnection("Server=localhost;Database=Northwind;uid=sa;pwd=")
oDataAdapter = New SqlDataAdapter("SELECT
ProductID,ProductName,UnitPrice FROM Products", oConnection)
oDataSet = New DataSet

oConnection.Open()
oDataAdapter.Fill(oDataSet, "Products")
oConnection.Close()

Me.DataGrid1.DataSource = oDataSet
Me.DataGrid1.DataMember = "Products"

' crear estilo de tabla para el datagrid
Dim oTableStyle As New DataGridTableStyle
oTableStyle.MappingName = "Products"

' crear columnas personalizadas para el estilo del grid
Dim gcsProductID As New DGColFija(50)
gcsProductID.MappingName = "ProductID"
gcsProductID.HeaderText = "Código"
gcsProductID.Width = 50

Dim gcsProductName As New DGColFija(150)
gcsProductName.MappingName = "ProductName"
gcsProductName.HeaderText = "Nombre"
gcsProductName.Width = 150

Dim gcsUnitPrice As New DGColFija(70)
gcsUnitPrice.MappingName = "UnitPrice"
gcsUnitPrice.HeaderText = "Precio"
gcsUnitPrice.Width = 70

' agregar columnas al estilo
oTableStyle.GridColumnStyles.AddRange(New DataGridColumnStyle() _
{gcsProductID, gcsProductName, gcsUnitPrice})

' aplicar estilo al grid
Me.DataGrid1.TableStyles.Add(oTableStyle)
End Sub
End Class

' a continuación tenemos la clase que crea nuestras
' columnas con el ancho fijo para el datagrid
Public Class DGColFija
Inherits DataGridTextBoxColumn

Private AnchoFijo As Integer

Public Sub New(ByVal nAnchoFijo As Integer)
Me.AnchoFijo = nAnchoFijo
End Sub

Private Sub DGTxtColColor_WidthChanged(ByVal sender As Object, ByVal e
As System.EventArgs) Handles MyBase.WidthChanged
Me.Width = Me.AnchoFijo
End Sub
End Class
'/////////////////////////////////

El motivo de crear el constructor de la clase personalizada con el parámetro
para el ancho y no en una propiedad radica en que si asignamos antes la
propiedad Width que la propiedad AnchoFijo de nuestra clase, obtendremos
resultados inesperados al visualizar el grid, como por ejemplo que no se
muestren las columnas ya que habrían tomado el valor cero para el ancho.

Espero que este ejemplo te sea de utilidad para resolver tu problema.
Un saludo
Luis Miguel Blanco
http://www.dotnetmania.com


"Jesús M.I" wrote:

Muy buenas tardes amigos del foro.

Se me presenta un problema y ya como ultisimo recurso vengo y os pregunto a
todos es lo siguiente, kiero controlar aún más mi aplicación
restringiendo en el datagrid, que el usuario no pueda modificcar el ancho de
los campos, ya q me yo me creo mi propio estilo de mi tabla etc... pero o
consigo controlar q este fijo, que el usuario no me modifique la anchura q le
doy es decir.. el usuario me deforma el datagrid como quiere...

Podeis ayudarme? muchas gracias a todos.
Respuesta Responder a este mensaje
#3 Jesús M.I
12/06/2006 - 19:37 | Informe spam
muy bien Miguel, de hecho ya tenia mi hoja de estilo pero si desconocia del
width changed q me dices
no se si lo encontraré o no, de todas formas muchisimas gracias haber si lo
consigo, ya informaré

"Luis Miguel Blanco" escribió:

Hola Jesús M.I.

Si necesitas bloquear o congelar el ancho de las columnas en un datagrid
puedes crear una columna de estilo personalizada que herede de la clase
DataGridTextBoxColumn, y en ella codificas el evento WidthChanged que se
produce cada vez que el usuario intenta cambiar el ancho de la columna,
obligando a que el ancho quede a un tamaño que establezcas en dicho
manipulador de evento.

Esta clase derivada DataGridTextBoxColumn deberás utilizarla en un estilo
(objeto DataGridTableStyle) que aplicarás al datagrid, creando tantos objetos
de tu clase personalizada como columnas quieras dejar con el ancho fijo.

A continuación te acompaño un bloque de código con un ejemplo de este
bloqueo para el ancho de las columnas:

'/////////////////////////////////
Imports System.Data.SqlClient

Public Class Form1
Inherits System.Windows.Forms.Form

Private oConnection As SqlConnection
Private oDataAdapter As SqlDataAdapter
Private oDataSet As DataSet

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
oConnection = New
SqlConnection("Server=localhost;Database=Northwind;uid=sa;pwd=")
oDataAdapter = New SqlDataAdapter("SELECT
ProductID,ProductName,UnitPrice FROM Products", oConnection)
oDataSet = New DataSet

oConnection.Open()
oDataAdapter.Fill(oDataSet, "Products")
oConnection.Close()

Me.DataGrid1.DataSource = oDataSet
Me.DataGrid1.DataMember = "Products"

' crear estilo de tabla para el datagrid
Dim oTableStyle As New DataGridTableStyle
oTableStyle.MappingName = "Products"

' crear columnas personalizadas para el estilo del grid
Dim gcsProductID As New DGColFija(50)
gcsProductID.MappingName = "ProductID"
gcsProductID.HeaderText = "Código"
gcsProductID.Width = 50

Dim gcsProductName As New DGColFija(150)
gcsProductName.MappingName = "ProductName"
gcsProductName.HeaderText = "Nombre"
gcsProductName.Width = 150

Dim gcsUnitPrice As New DGColFija(70)
gcsUnitPrice.MappingName = "UnitPrice"
gcsUnitPrice.HeaderText = "Precio"
gcsUnitPrice.Width = 70

' agregar columnas al estilo
oTableStyle.GridColumnStyles.AddRange(New DataGridColumnStyle() _
{gcsProductID, gcsProductName, gcsUnitPrice})

' aplicar estilo al grid
Me.DataGrid1.TableStyles.Add(oTableStyle)
End Sub
End Class

' a continuación tenemos la clase que crea nuestras
' columnas con el ancho fijo para el datagrid
Public Class DGColFija
Inherits DataGridTextBoxColumn

Private AnchoFijo As Integer

Public Sub New(ByVal nAnchoFijo As Integer)
Me.AnchoFijo = nAnchoFijo
End Sub

Private Sub DGTxtColColor_WidthChanged(ByVal sender As Object, ByVal e
As System.EventArgs) Handles MyBase.WidthChanged
Me.Width = Me.AnchoFijo
End Sub
End Class
'/////////////////////////////////

El motivo de crear el constructor de la clase personalizada con el parámetro
para el ancho y no en una propiedad radica en que si asignamos antes la
propiedad Width que la propiedad AnchoFijo de nuestra clase, obtendremos
resultados inesperados al visualizar el grid, como por ejemplo que no se
muestren las columnas ya que habrían tomado el valor cero para el ancho.

Espero que este ejemplo te sea de utilidad para resolver tu problema.
Un saludo
Luis Miguel Blanco
http://www.dotnetmania.com


"Jesús M.I" wrote:

> Muy buenas tardes amigos del foro.
>
> Se me presenta un problema y ya como ultisimo recurso vengo y os pregunto a
> todos es lo siguiente, kiero controlar aún más mi aplicación
> restringiendo en el datagrid, que el usuario no pueda modificcar el ancho de
> los campos, ya q me yo me creo mi propio estilo de mi tabla etc... pero o
> consigo controlar q este fijo, que el usuario no me modifique la anchura q le
> doy es decir.. el usuario me deforma el datagrid como quiere...
>
> Podeis ayudarme? muchas gracias a todos.
Respuesta Responder a este mensaje
#4 Jesús M.I
12/06/2006 - 19:43 | Informe spam
NO kise decir hoja sino Estilo, pero te diré algo Error colosal, ese evento
solo existe en 2005.
Saludos.

"Jesús M.I" escribió:

muy bien Miguel, de hecho ya tenia mi hoja de estilo pero si desconocia del
width changed q me dices
no se si lo encontraré o no, de todas formas muchisimas gracias haber si lo
consigo, ya informaré

"Luis Miguel Blanco" escribió:

> Hola Jesús M.I.
>
> Si necesitas bloquear o congelar el ancho de las columnas en un datagrid
> puedes crear una columna de estilo personalizada que herede de la clase
> DataGridTextBoxColumn, y en ella codificas el evento WidthChanged que se
> produce cada vez que el usuario intenta cambiar el ancho de la columna,
> obligando a que el ancho quede a un tamaño que establezcas en dicho
> manipulador de evento.
>
> Esta clase derivada DataGridTextBoxColumn deberás utilizarla en un estilo
> (objeto DataGridTableStyle) que aplicarás al datagrid, creando tantos objetos
> de tu clase personalizada como columnas quieras dejar con el ancho fijo.
>
> A continuación te acompaño un bloque de código con un ejemplo de este
> bloqueo para el ancho de las columnas:
>
> '/////////////////////////////////
> Imports System.Data.SqlClient
>
> Public Class Form1
> Inherits System.Windows.Forms.Form
>
> Private oConnection As SqlConnection
> Private oDataAdapter As SqlDataAdapter
> Private oDataSet As DataSet
>
> Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
> System.EventArgs) Handles MyBase.Load
> oConnection = New
> SqlConnection("Server=localhost;Database=Northwind;uid=sa;pwd=")
> oDataAdapter = New SqlDataAdapter("SELECT
> ProductID,ProductName,UnitPrice FROM Products", oConnection)
> oDataSet = New DataSet
>
> oConnection.Open()
> oDataAdapter.Fill(oDataSet, "Products")
> oConnection.Close()
>
> Me.DataGrid1.DataSource = oDataSet
> Me.DataGrid1.DataMember = "Products"
>
> ' crear estilo de tabla para el datagrid
> Dim oTableStyle As New DataGridTableStyle
> oTableStyle.MappingName = "Products"
>
> ' crear columnas personalizadas para el estilo del grid
> Dim gcsProductID As New DGColFija(50)
> gcsProductID.MappingName = "ProductID"
> gcsProductID.HeaderText = "Código"
> gcsProductID.Width = 50
>
> Dim gcsProductName As New DGColFija(150)
> gcsProductName.MappingName = "ProductName"
> gcsProductName.HeaderText = "Nombre"
> gcsProductName.Width = 150
>
> Dim gcsUnitPrice As New DGColFija(70)
> gcsUnitPrice.MappingName = "UnitPrice"
> gcsUnitPrice.HeaderText = "Precio"
> gcsUnitPrice.Width = 70
>
> ' agregar columnas al estilo
> oTableStyle.GridColumnStyles.AddRange(New DataGridColumnStyle() _
> {gcsProductID, gcsProductName, gcsUnitPrice})
>
> ' aplicar estilo al grid
> Me.DataGrid1.TableStyles.Add(oTableStyle)
> End Sub
> End Class
>
> ' a continuación tenemos la clase que crea nuestras
> ' columnas con el ancho fijo para el datagrid
> Public Class DGColFija
> Inherits DataGridTextBoxColumn
>
> Private AnchoFijo As Integer
>
> Public Sub New(ByVal nAnchoFijo As Integer)
> Me.AnchoFijo = nAnchoFijo
> End Sub
>
> Private Sub DGTxtColColor_WidthChanged(ByVal sender As Object, ByVal e
> As System.EventArgs) Handles MyBase.WidthChanged
> Me.Width = Me.AnchoFijo
> End Sub
> End Class
> '/////////////////////////////////
>
> El motivo de crear el constructor de la clase personalizada con el parámetro
> para el ancho y no en una propiedad radica en que si asignamos antes la
> propiedad Width que la propiedad AnchoFijo de nuestra clase, obtendremos
> resultados inesperados al visualizar el grid, como por ejemplo que no se
> muestren las columnas ya que habrían tomado el valor cero para el ancho.
>
> Espero que este ejemplo te sea de utilidad para resolver tu problema.
> Un saludo
> Luis Miguel Blanco
> http://www.dotnetmania.com
>
>
> "Jesús M.I" wrote:
>
> > Muy buenas tardes amigos del foro.
> >
> > Se me presenta un problema y ya como ultisimo recurso vengo y os pregunto a
> > todos es lo siguiente, kiero controlar aún más mi aplicación
> > restringiendo en el datagrid, que el usuario no pueda modificcar el ancho de
> > los campos, ya q me yo me creo mi propio estilo de mi tabla etc... pero o
> > consigo controlar q este fijo, que el usuario no me modifique la anchura q le
> > doy es decir.. el usuario me deforma el datagrid como quiere...
> >
> > Podeis ayudarme? muchas gracias a todos.
Respuesta Responder a este mensaje
#5 Luis Miguel Blanco
13/06/2006 - 18:16 | Informe spam
Hola Jesús

No te preocupes, te entendí perfectamente 8-)

Respecto al error creo entender que dices que ese evento sólo está en visual
studio 2005, sin embargo el código de ejemplo que yo te envié lo probé en un
proyecto con visual studio 2003.

Si quieres, te puedo enviar a una dirección email el proyecto con el que
hice las pruebas, puedes encontrar mi dirección de correo en
www.dotnetmania.com, en el apartado-enlace "Autores".
Un saludo
Luis Miguel Blanco
http://www.dotnetmania.com


"Jesús M.I" wrote:

NO kise decir hoja sino Estilo, pero te diré algo Error colosal, ese evento
solo existe en 2005.
Saludos.

"Jesús M.I" escribió:

> muy bien Miguel, de hecho ya tenia mi hoja de estilo pero si desconocia del
> width changed q me dices
> no se si lo encontraré o no, de todas formas muchisimas gracias haber si lo
> consigo, ya informaré
>
> "Luis Miguel Blanco" escribió:
>
> > Hola Jesús M.I.
> >
> > Si necesitas bloquear o congelar el ancho de las columnas en un datagrid
> > puedes crear una columna de estilo personalizada que herede de la clase
> > DataGridTextBoxColumn, y en ella codificas el evento WidthChanged que se
> > produce cada vez que el usuario intenta cambiar el ancho de la columna,
> > obligando a que el ancho quede a un tamaño que establezcas en dicho
> > manipulador de evento.
> >
> > Esta clase derivada DataGridTextBoxColumn deberás utilizarla en un estilo
> > (objeto DataGridTableStyle) que aplicarás al datagrid, creando tantos objetos
> > de tu clase personalizada como columnas quieras dejar con el ancho fijo.
> >
> > A continuación te acompaño un bloque de código con un ejemplo de este
> > bloqueo para el ancho de las columnas:
> >
> > '/////////////////////////////////
> > Imports System.Data.SqlClient
> >
> > Public Class Form1
> > Inherits System.Windows.Forms.Form
> >
> > Private oConnection As SqlConnection
> > Private oDataAdapter As SqlDataAdapter
> > Private oDataSet As DataSet
> >
> > Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
> > System.EventArgs) Handles MyBase.Load
> > oConnection = New
> > SqlConnection("Server=localhost;Database=Northwind;uid=sa;pwd=")
> > oDataAdapter = New SqlDataAdapter("SELECT
> > ProductID,ProductName,UnitPrice FROM Products", oConnection)
> > oDataSet = New DataSet
> >
> > oConnection.Open()
> > oDataAdapter.Fill(oDataSet, "Products")
> > oConnection.Close()
> >
> > Me.DataGrid1.DataSource = oDataSet
> > Me.DataGrid1.DataMember = "Products"
> >
> > ' crear estilo de tabla para el datagrid
> > Dim oTableStyle As New DataGridTableStyle
> > oTableStyle.MappingName = "Products"
> >
> > ' crear columnas personalizadas para el estilo del grid
> > Dim gcsProductID As New DGColFija(50)
> > gcsProductID.MappingName = "ProductID"
> > gcsProductID.HeaderText = "Código"
> > gcsProductID.Width = 50
> >
> > Dim gcsProductName As New DGColFija(150)
> > gcsProductName.MappingName = "ProductName"
> > gcsProductName.HeaderText = "Nombre"
> > gcsProductName.Width = 150
> >
> > Dim gcsUnitPrice As New DGColFija(70)
> > gcsUnitPrice.MappingName = "UnitPrice"
> > gcsUnitPrice.HeaderText = "Precio"
> > gcsUnitPrice.Width = 70
> >
> > ' agregar columnas al estilo
> > oTableStyle.GridColumnStyles.AddRange(New DataGridColumnStyle() _
> > {gcsProductID, gcsProductName, gcsUnitPrice})
> >
> > ' aplicar estilo al grid
> > Me.DataGrid1.TableStyles.Add(oTableStyle)
> > End Sub
> > End Class
> >
> > ' a continuación tenemos la clase que crea nuestras
> > ' columnas con el ancho fijo para el datagrid
> > Public Class DGColFija
> > Inherits DataGridTextBoxColumn
> >
> > Private AnchoFijo As Integer
> >
> > Public Sub New(ByVal nAnchoFijo As Integer)
> > Me.AnchoFijo = nAnchoFijo
> > End Sub
> >
> > Private Sub DGTxtColColor_WidthChanged(ByVal sender As Object, ByVal e
> > As System.EventArgs) Handles MyBase.WidthChanged
> > Me.Width = Me.AnchoFijo
> > End Sub
> > End Class
> > '/////////////////////////////////
> >
> > El motivo de crear el constructor de la clase personalizada con el parámetro
> > para el ancho y no en una propiedad radica en que si asignamos antes la
> > propiedad Width que la propiedad AnchoFijo de nuestra clase, obtendremos
> > resultados inesperados al visualizar el grid, como por ejemplo que no se
> > muestren las columnas ya que habrían tomado el valor cero para el ancho.
> >
> > Espero que este ejemplo te sea de utilidad para resolver tu problema.
> > Un saludo
> > Luis Miguel Blanco
> > http://www.dotnetmania.com
> >
> >
> > "Jesús M.I" wrote:
> >
> > > Muy buenas tardes amigos del foro.
> > >
> > > Se me presenta un problema y ya como ultisimo recurso vengo y os pregunto a
> > > todos es lo siguiente, kiero controlar aún más mi aplicación
> > > restringiendo en el datagrid, que el usuario no pueda modificcar el ancho de
> > > los campos, ya q me yo me creo mi propio estilo de mi tabla etc... pero o
> > > consigo controlar q este fijo, que el usuario no me modifique la anchura q le
> > > doy es decir.. el usuario me deforma el datagrid como quiere...
> > >
> > > Podeis ayudarme? muchas gracias a todos.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida