miércoles, mayo 04, 2005

Ordenación (sort) con Web Matrix

Web Matrix contienen un control llamado MxDataGrid, que se supone es una version mejorada del control DataGrid. La verdad es que no lo encuentro tan amigable despues de todo. Razones:

  1. No contiene la opcion de "Formato Automatico" como el DataGrid normal,
  2. Existe poca información sobre su uso.
  3. El sort u ordenamiento, asi como la paginación no es tan inmediata, si se tiene que modificar el codigo.
Asi que con lo anterior, recomiendo usar el DataGrid normal.

Estuve posponiendo, por esto mismo, el agregar ordenacion en mis pantallas que contienen un data grid, pero por fin lo resolví y no estuvo tan complicado.
Algo que debo mencionar, es que pensé que el DataGrid haria el ordenamiento por mi, que no tendria que codificar algo para esto. Error!.
Pero no fue tan complicado, primero modifique la función "select" que se genera con los code wizards de Web Matrix.



Ejemplo:
Function obtenLotesxSubasta(ByVal iDSubasta As Integer) As System.Data.IDataReader
Dim connectionString As String = System.Configuration.ConfigurationSettings.AppSettings("miconexion")
Dim dbConnection As System.Data.IDbConnection = New System.Data.OleDb.OleDbConnection(connectionString)

Dim queryString As String = "SELECT .... FROM "
Dim dbCommand As System.Data.IDbCommand = New System.Data.OleDb.OleDbCommand
dbCommand.CommandText = queryString
dbCommand.Connection = dbConnection

Dim dbParam_iDSubasta As System.Data.IDataParameter = New System.Data.OleDb.OleDbParameter
dbParam_iDSubasta.ParameterName = "@IDSubasta"
dbParam_iDSubasta.Value = iDSubasta
dbParam_iDSubasta.DbType = System.Data.DbType.Int32
dbCommand.Parameters.Add(dbParam_iDSubasta)

dbConnection.Open
Dim dataReader As System.Data.IDataReader = dbCommand.ExecuteReader(System.Data.CommandBehavior.CloseConnection)

Return dataReader
End Function


Lo anterior se genera automaticamente, se hacen las siguientes modificaciones...


Function obtenLotesxSubasta(ByVal iDSubasta As Integer, ByVal orden As String) As System.Data.IDataReader

y ademas...

Dim queryString As String = "SELECT .... FROM ORDER BY " & orden

Pude haber usado un parametro en lugar de agregarlo directamente a la cadena de query ( tal vez lo haga mas adelante), pero funciona bien de esta forma usando menos lineas... ;).

Se tiene que agregar el atributo OnSortCommand="midatagrid_SortCommand" al DataGrid y por supuesto escoger las columnas que se podrán ordenar agregando SortExpression="ID" segun corresponda. Y finalmente el eventhandler:

Sub midatagrid_SortCommand(sender As Object, e As DataGridSortCommandEventArgs)
orden = e.SortExpression
intIDSubasta = request.querystring("suabsta")
dgrLotes.DataSource = obtenLotesxSubasta(intIDSubasta, orden)
dgrLotes.DataBind()
End Sub


Listo!

No hay comentarios.: