diciembre 11, 2006

Check box en GridView para procesar renglones seleccionados

Recientemente tuve la necesidad de poner un ccheck box en cada una de las filas de un control GridView para que poder seleccionar a un número determinado de ellas y asi poder procesarlas.




1. Agregar el control check box al GridView como parte de sus columnas:



2. Recorrer a todos los renglones del GridView para identificar cuales están seleccionados.

'Obtener el total de renglones para saber cunado parar durante la iteración.
Dim intRows As Int16 = Me.GridViewEdoCta.Rows.Count

For i = 0 To Me.GridViewEdoCta.Rows.Count - 1
'En la posición 13 es en donde se encuentra el control Check.
If CType(Me.GridViewEdoCta.Rows(i).Cells(13).Controls(1), CheckBox).Checked Then
CargoxContrato = Me.GridViewEdoCta.Rows(i).Cells(0).Text
End If
Next

Inserciones, Actulizaciones y Borrados masivo de registros

En el siguiente ejemplo se expone como hacer Deletes y Updates masivamente con el uso de XML, sólo es necesario pasar el árbol XML al store procedure para leerlo y especificarlo en las intrucciones delete y update. La´página web referencia es:

http://support.microsoft.com/kb/316244/es

Cadena xml válida que recibe el sp:


CREATE PROCEDURE sps_CancelaCargosXContratoTelXML
@xmlCargosxContrato varchar(8000) AS

DECLARE @idoc int --xmlDoc

--Ejecutar el sp que carga en memoria el docuemnto XML.
EXEC sp_xml_preparedocument @idoc output, @xmlCargosxContrato

--Comienza la transacción
BEGIN TRANSACTION
--Actualizar el Status de los cargos a Cancelado.

UPDATE Tel_CargosxContrato SET Tel_CargosxContrato.Status = 'CANCELADO'FROM OPENXML (@idoc, '/CargosxContrato/Concepto')
WITH (CargoUid varchar(11)) Tel_CargosxContratoXML
WHERE Tel_CargosxContrato.Uid = Tel_CargosxContratoXML.CargoUid

--Verificar si hubo errores saltar al bloque manejador.

IF @@Error != 0
GOTO ERROR_HANDLER
--Eliminar cargos de la tabla TEL_Cobranza

Delete Tel_cobranza
FROM OPENXML (@idoc, '/CargosxContrato/Concepto')
WITH (CargoUid varchar(11)) CobranzaXMLWHERE Tel_Cobranza.Uid = CobranzaXML.CargoUid

--Verificar si hubo errores saltar al bloque manejador.
IF @@Error != 0
BEGIN
GOTO ERROR_HANDLE

--Finalizar la Transacción pues todo salió bien.
COMMIT TRANSACTION
SET NOCOUNT OFF
--Descargar documento XML de la memoria.
EXEC sp_xml_removedocument @idoc
RETURN 0

--Manejador de Error.
ERROR_HANDLER:
ROLLBACK TRANSACTION--Descargar documento XML de la memoria.EXEC sp_xml_removedocument @idoc
SET NOCOUNT OFF
RETURN 0
GO

Ocultar columnas con DataBind en un GridView

Es muy comun el poblar un control GridView con datos de una Base de Datos y ocultar columnas que no es recomendable que se muestran a los usuarios, pero en el GridView al poner la propiedad visible= False de una columna a ocultar y luego tratar de recuperar el valor de esta celda el valor es cadena vacía, para que esto no courra se debe implementar el siguiente evento manejado del GridView y aquí poner las columnas que se desea ocultar.

'Ocultar columnas del GridView que no son necesarias para el usuario en la vista.
Public Sub myGrid_OnRowCreated(ByVal sender As Object, ByVal e As Web.UI.WebControls.GridViewRowEventArgs) Handles GridViewEdoCta.RowCreated
e.Row.Cells(0).Visible = False 'Uid cobranza
e.Row.Cells(1).Visible = False 'MovimientoUid
End Sub

De esta forma si es posible recuperar su valor.
'Recuperar el valor de la celda, aunque este oculta.
Dim strClave as String = Me.GridViewEdoCta.Rows(1).Cells(0).Text

Imprimir directamente con ASP.NET


1. En el evento Load cargo la lista de impresoras disponibles localemente.

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
Me.DropDownListImpresoras.DataSource = PrinterSettings.InstalledPrinters()
Me.DropDownListImpresoras.DataBind()
Me.DropDownListImpresoras.SelectedIndex = 0
End If
End Sub

2. Al hacer clic en el botón imprimir
Protected Sub ButtonImprimir_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ButtonImprimir.Click
'Create an instance of PrintDocument
Dim printdoc As New System.Drawing.Printing.PrintDocument()
' Set the printer name
printdoc.PrinterSettings.PrinterName = Me.DropDownListImpresoras.Text
' Handle printing
AddHandler printdoc.PrintPage, AddressOf Me.printdoc_PrintPage
' Print!
printdoc.Print()
End Sub

3. Evento manejado al imprimir que es en donde se especifica lo que se desea imprimir.

Private Sub printdoc_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
'Definición de la fte a utilizar.
Dim printFont As System.Drawing.Font = New System.Drawing.Font("Courier New", 12)

' Dibujar el nombre escrito y que se desea imprimir directamente.
e.Graphics.DrawString(Me.TextBox1.Text, printFont, System.Drawing.Brushes.Black, New System.Drawing.PointF(10.0F, 50.0F))
End Sub