miércoles, 5 de septiembre de 2007

Progress Bar en ASP.NET 2.0

Buscando Barras de progreso en Internet me topé con uno de esos controles dll que funcionaba a la perfección, pero pedia un donativo (practicamente shareware con alerta y todo) para el control. Asi que decidí ver como funcionaba y publicar mi propio control para uso público. Aqui les dejo el código fuente (ProgressBar.ascx y ProgressBar.ascx.vb)

ProgressBar.ascx

<% Control Language="VB" AutoEventWireup="false" CodeFile="ProgressBar.ascx.vb" Inherits="componentes_ProgressBar" %>
<table cellspacing="1" cellpadding="0" border="0" style="border-color:Blue;border-width:1px;border-style:solid;height:20px;width:200px;"><tr><td style="background-color:#0000ff;"></td><td style="background-color:#0000ff;"></td><td style="background-color:#0000ff;"></td><td style="background-color:#0000ff;"></td><td style="background-color:#0000ff;"></td><td style="background-color:#0000ff;"></td><td style="background-color:#0000ff;"></td><td style="background-color:#0000ff;"></td><td style="background-color:#0000ff;"></td><td style="background-color:#0000ff;"></td><td style="background-color:#0000ff;"></td><td style="background-color:#0000ff;"></td><td style="background-color:#0000ff;"></td><td style="background-color:#0000ff;"></td><td style="background-color:#0000ff;"></td><td style="background-color:#0000ff;"></td><td style="background-color:#0000ff;"></td><td style="background-color:#0000ff;"></td><td style="background-color:#0000ff;"></td><td style="background-color:#0000ff;"></td><td style="background-color:#0000ff;"></td><td style="background-color:#0000ff;"></td><td style="background-color:#0000ff;"></td><td style="background-color:#d3d3d3;"></td><td style="background-color:#d3d3d3;"></td><td style="background-color:#d3d3d3;"></td><td style="background-color:#d3d3d3;"></td><td style="background-color:#d3d3d3;"></td><td style="background-color:#d3d3d3;"></td><td style="background-color:#d3d3d3;"></td></tr></table>



ProgressBar.ascx.vb

Partial Class componentes_ProgressBar : Inherits System.Web.UI.UserControl
Private _forecolor As Color = Color.Blue
Private _backgroundcolor As Color = Color.LightGray
Private _width As String = "200px"
Private _valor As Integer = 0
Private _maxCuadros As Integer = 30

Public Property ForeColor() As Color
Get
Return
_forecolor
End Get
Set
(ByVal value As Color)
Me._forecolor = value
End Set
End Property

Public Property
BackgroundColor() As Color
Get
Return
_backgroundcolor
End Get
Set
(ByVal value As Color)
Me._backgroundcolor = value
End Set
End Property

Public Property
MaxCuadros() As Integer
Get
Return
_maxCuadros
End Get
Set
(ByVal value As Integer)
_maxCuadros
= value
End Set
End Property

Public Property
Width() As String
Get
Return
_width
End Get
Set
(ByVal value As String)
_width
= value
End Set
End Property

Function
ToHexColor(ByVal c As Color) As String
Return
"#" + c.ToArgb().ToString("x").Substring(2)
End Function

Public Property
Value() As Integer
Get
Return
_valor
End Get
Set
(ByVal value As Integer)
If value > 100 Then value = 100
If value < 0 Then value = 0
_valor = value
End Set
End Property

Protected Overrides Sub
Render(ByVal Output As HtmlTextWriter)
Dim i As Integer
Dim
vreal As Integer = CInt((_valor * _maxCuadros / 100) + 0.5)
Dim fcolor As String = ToHexColor(_forecolor)
Dim bcolor As String = ToHexColor(_backgroundcolor)
Dim c As String
Output.Write("<table cellspacing=""1"" cellpadding=""0"" border=""0"" style=""border-color:Blue;border-width:1px;border-style:solid;height:20px;width:" & _width & ";""><tr>")
For i = 1 To _maxCuadros
c
= IIf(vreal < i, bcolor, fcolor)
Output.Write(
"<td style=""background-color:" & c & ";""></td>")
Next
Output.Write("</tr></table>")
End Sub
End Class



domingo, 2 de septiembre de 2007

Selección múltiple con checkbox en Gridview

Muchas veces necesitamos ejecutar una acción para múltiples filas seleccionadas en un gridview a través de un checkbox, para ello lo primero que necesitamos es agregar la propiedad DataKeyNames con el ID primario de los datos que cargamos, asi podemos realizar las acciones necesarias accediendo individualmente a cada registro del GridView.

<asp:GridView id="gridview1" runat="server" DataKeyNames="id_persona" AutoGenerateColumns="False">
<Columns>
.
.

Aqui agregamos el TemplateField con el checkBox para insertarlo en el GridView...

.
.
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox id="chkMarca" runat="server"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>

Si queremos que las acciones se tomen sin necesidad de utilizar los eventos manejados por el GridView, podemos crear un Método que puede ser llamado directamente por un botón u otro control.


Private Sub EliminarPersonasSeleccionadas()
Dim persona as New Persona()
Dim iditem As Integer
For Each
dgi As GridViewRow In Me.gridview1.Rows
Dim ch As CheckBox = CType(dgi.FindControl("chkMarca"), CheckBox)
If ch.Checked Then
iditem = gridview1.DataKeys(dgi.DataItemIndex).Value
persona.id_persona
= iditem
persona.Eliminar()
End If
Next
End Sub