Showing posts with label Código. Show all posts
Showing posts with label Código. Show all posts

Wednesday, November 23, 2016

Cómo concatenar filas en SQL SERVER

Cómo concatenar filas en SQL SERVER separados por comas y sin coma al final ni al principio? Utilizando STUFF y FOR XML PATH

Ejemplo




(SELECT STUFF((
        SELECT TOP 100 ','+ convert(VARCHAR(10), a.Numero)  
  FROM MANAnexos a WHERE a.Id IN (
  SELECT cuotas.IdAnexo  
  FROM  COBFacturas factura 
  INNER JOIN COBTransaccionesCajas transac ON transac.Id = factura.IdTransaccionCaja 
  INNER JOIN COBCuotasTransacciones cuotastran ON cuotastran.IdTransaccionCaja =transac.Id 
  INNER JOIN COBCuotas cuotas ON cuotas.id=cuotastran.IdCuota  
  WHERE factura.Id = @IDFactura)
       FOR XML PATH('')
),1,1, 'Anexo ')) AS Descripcion

Wednesday, December 11, 2013

Cuántos domingos hay en un rango de fecha - Query

La pregunta es cómo determinar, dado un rango de fechas, cuántos días domingos hay.
SQL Server no tiene una función propia como tal, así que podemos utilizar la siguiente
función la cual le enviamos el rango de fechas. 
 
 
 CREATE FUNCTION fncCuantosDomingosHay (@inicio DATETIME, @fin DATETIME)
  RETURNS integer
  AS
  BEGIN
  DECLARE @dia_sem INT
  DECLARE @domingos INT
  DECLARE @fecha datetime
   
  SET @fecha=@inicio
  SET @domingos=0
  while @fecha <= @fin
  BEGIN    
   SELECT @dia_sem=datepart(weekday,@fecha) 
   IF @dia_sem=1
     SET @domingos=@domingos+1    
   SELECT @fecha=dateadd(dd,1,@fecha)     
  END
  return @domingos
    END


--EJECUTAMOS LA FUNCIÓN

declare @total integer

exec @total= fncCuantosDomingosHay '2013/10/16','2013/11/15'

print @total

--Resultado: 4

Thursday, December 5, 2013

Primer y último día de la fecha actual / vb.net

Se busca colocar por defecto la fecha con el primer día del mes actual y el último día propiamente al control DateTimePicker.

Me.dtpCierreExitosoDE.Value = Date.Now.AddDays(-Now.Day + 1)
Me.dtpCierreExitosoAL.Value = Date.Now.AddDays(-Now.Day + 1).AddMonths(1).AddDays(-1)
 
Sencillo, no?
 
HaPPy Coding =) 

Thursday, September 12, 2013

Cuántos Sábados y Domingos hay en un rango de fechas

Cuántos Sábados y Domingos hay en un rango de fechas (en vb.net)

La solución... seguramente muchas pero la mía ha sido Una función que recibe el rango de fechas (en mi caso solo una porque la trabajo con la fecha actual) que va preguntando si las fechas intermedias son o no sábado o domingo. Simple. 

    Public Function NotWorkingDays(ByVal dtFechaRegistro As Date)

        Dim dtFechaActual As Date = Now.Date 
        dtFechaRegistro = dtFechaRegistro.Date

        Dim dias_no_laborales As Integer = 0
        While dtFechaRegistro <= dtFechaActual

            If dtFechaRegistro.DayOfWeek = DayOfWeek.Saturday Or dtFechaRegistro.DayOfWeek = DayOfWeek.Sunday Then
                dias_no_laborales = dias_no_laborales + 1
            End If

            dtFechaRegistro = dtFechaRegistro.AddDays(1)
        End While

        Return dias_no_laborales
    End Function

Friday, August 30, 2013

Datediff - convertir horas A decimal

Me pidieron saber el tiempo transcurrido en horas dada dos fechas. Fecha hora inicial en la que el Call Center recibió una llamada hasta la hora fecha en la que se dio respuesta a esa llamada.

Fecha Hora inicial: 30/08/2013 07:30:30
Fecha Hora final: 30/08/2013 08:00:00

Dado ese ejemplo, tenemos que transcurrieron 1.51 horas de tiempo. Pero resulta que cuando realizamos alguna división, la función Datediff omite la parte decimal y por tanto el cálculo ya no es exacto.

La siguiente línea de código muestra cómo hacerlo. Cómo convertir horas a decimal utilizando DATEDIFF

declare @start datetime
set @start = '2013-08-29 07:00:00'

declare @end datetime
set @end = '2013-08-29 08:30:30' --getdate() 1,51
select cast(datediff(second, @start, @end) / 3600.0 as decimal (10, 2))


Fácil, ¿no?

Monday, March 4, 2013

Rotar como La interfaz metro de windows8 con CSS3

La interfaz que utiliza Windows 8 es la Modern UI (Metro) que hace uso de efectos 3D. Podemos copiar esos efectos para agregarlos a nuestros diseños web y que se vean chulos utilizando CSS3.

Vamos a rotar 3 cajas. Una rotará desde el centro, la segunda rotará desde el lateral y se desplazará y la tercera rotará desde el lateral.



Código HTML

    
  
        
Rota desde el centro  
Rota desde el lateral y se desplaza  
Rota desde el lateral  
Código CSS
.cobertor {
        display: table;
        background: #112E86;
        text-align: center;
        padding: 15px;
        margin: 20px auto;
        box-shadow: inset 0px 0px 20px black;
        -moz-border-radius: 3px;
        -webkit-border-radius: 3px;
        border-radius: 3px;
      }
      .cobertor div {
        display: inline-block;
        background: #cccccc;
        padding: 15px;
        margin: 15px;
        /*color: #111111;*/
        text-shadow: 1px 1px 0px rgba(255, 255, 255, 0.6);
        box-shadow: 0px 0px 20px black, inset 0px 1px 0px rgba(255, 255, 255, 0.6), inset 0px 2px 0px rgba(255, 255, 255, 0.1);
        -moz-border-radius: 3px;
        -webkit-border-radius: 3px;
        border-radius: 3px;
      }
      .cobertor div,
      .cobertor div > div {
        -webkit-transition: all 0.5s ease;
        -moz-transition: all 0.5s ease;
        transition: all 0.5s ease;
        -webkit-transform-style: preserve- 3 d;
        -moz-transform-style: preserve- 3 d;
        transform-style: preserve- 3 d;
        -webkit-transform: perspective(600px);
        -moz-transform: perspective(600px);
        transform: perspective(600px);
      }
      
      .cobertor .rotar span {
        display: inline-block;
      }
      
      .cobertor .rotar div {
        -webkit-transition: all 1s ease;
        -moz-transition: all 1s ease;
        transition: all 1s ease;
        margin: 10px;
        padding-top: 40px;
        height: 80px;
        width: 120px;
                          background: #2E9AFE;
        -webkit-transform: perspective(300px);
        -moz-transform: perspective(300px);
        transform: perspective(300px);
        -webkit-transform-origin: 100% 50%;
        -moz-transform-origin: 100% 50%;
        transform-origin: 100% 50%;
      }
      .cobertor .rotar span:hover .rotar-1 {
        -webkit-transform: perspective(300px) rotateY(-180deg);
        -moz-transform: perspective(300px) rotateY(-180deg);
        transform: perspective(300px) rotateY(-180deg);
      }
      .cobertor .rotar span .rotar-2 {
        -webkit-transform-origin: 50% 50%;
        -moz-transform-origin: 50% 50%;
        transform-origin: 50% 50%;
      }
      .cobertor .rotar span:hover .rotar-2 {
        -webkit-transform: perspective(300px) rotateY(-180deg);
        -moz-transform: perspective(300px) rotateY(-180deg);
        transform: perspective(300px) rotateY(-180deg);
      }
      .cobertor .rotar span:hover .rotar-3 {
        -webkit-transform: perspective(300px) rotateY(-180deg) translateX(100%);
        -moz-transform: perspective(300px) rotateY(-180deg) translateX(100%);
        transform: perspective(300px) rotateY(-180deg) translateX(100%);
      }

Este artículo fue basado en el post de mi querido amigo Pedro Gutierrez. Gracias!

Thursday, November 15, 2012

Restar dos fechas

Cómo restar dos fechas en Visual Basic .Net vb.net DateTimePicker

Problema: Dada dos fechas, cómo restarlas para saber cuántos días, horas, minutos o segundos han transcurrido.

En mi caso, yo tengo configurado en una tabla el número de días permitidos para tener acceso a ver cierto reporte a partir de la fecha actual. Por ejemplo, si hoy es 15/11/12 y el número configurado es 15 días, debo saber cuántos días hay entre la fecha que eligió el usuario a la fecha actual. Si esa resta es igual o menor al número de días que tengo configurado (15 en este caso), podrá visualizar el reporte.

Podemos hacerlo de dos maneras: utilizando "Subtract" (TimeSpan) y "DateDiff"

Dim resta1 As TimeSpan = Now.Date.Subtract(Me.dtpFechaInicial.Value.Date)

Dim resta2 As Integer = Now.Date.Subtract(Me.dtpFechaInicial.Value.Date).Days

Dim resta3 As Integer = DateDiff(DateInterval.Day, Me.dtpFechaInicial.Value.Date, Now.Date)

resta1 nos devuelve un objeto de tipo TimeSpan. Al darle resta1. nos lista los métodos disponibles y uno de ellos es Days. Eso devuelve resta2, un Integer. Significa el número de días que hay entre el rango de fechas. Por otro lado, resta3 nos devuelve asimismo el número de días que hay entre el rango de fechas dados que también es un Integer.

HaPPy Coding =)

Friday, October 12, 2012

SQL SERVER 2008: volver Una columna A identity

Recuerdo que en SQL Server 2005 era fácil volver una columna a identity. Solo tenías que hacer clic derecho sobre la columna en el Management Studio, Modificar/Modify y en la ventanita Collumn Properties bajo la propiedad Identity Specification: Yes, Identity Seed: el último ID.

Pero con el SQL SERVER 2008 no se puede. Los pasos para hacerlo serían:

1. Te creas una tabla auxiliar de la que quieres volver identity.

create table Boveda_Auxiliar(
 Cod_Boveda int primary key identity(1,1),
 Cod_Sucursal smallint,
 Descripcion varchar(50),
 Cod_Cobertura int,
 sLastUpdate_id varchar(16),
 dtLastUpdate_dt datetime,
 iConcurrency_id int,
 FechaCreacion datetime,
 Activo bit
)

2. Ponemos el Identity Insert en on


SET IDENTITY_INSERT Boveda_Auxiliar ON

3. Llenamos la tabla auxiliar con los datos insertados en la tabla original.

insert into Boveda_Auxiliar (Cod_Boveda, Cod_Sucursal,Descripcion, Cod_Cobertura,sLastUpdate_id, dtLastUpdate_dt, iConcurrency_id, FechaCreacion, Activo  ) 
select Cod_Boveda, Cod_Sucursal,Descripcion, Cod_Cobertura,sLastUpdate_id, dtLastUpdate_dt, iConcurrency_id, FechaCreacion, Activo from Boveda

5. Ponemos el Identity Insert en off

SET IDENTITY_INSERT Boveda_Auxiliar OFF

6. Eliminamos la tabla Original

drop table Boveda

7. Renombramos la tabla auxiliar con el nombre de la tabla original.

sp_rename 'Boveda_Auxiliar','Boveda'

8. Llevamos la semilla del Identity al último ID

DBCC CHECKIDENT('Boveda', RESEED, select max(Cod_Boveda) from boveda)

Fácil, no? Sí, fácil pero tedioso. No tengo idea por qué no se puede hacer este proceso como en el caso del Sql Server 2005.

HaPPy Coding! =)

Friday, August 3, 2012

Formato fecha dd/MM/yyyy en sqlserver

Si querés hacer un SELECT a una columna de tipo Date o Fecha y querés que únicamente se vea la Fecha (y no la hora) y que sea del formato dd/MM/yyyy, el código sería así:

SELECT convert(char(10), EspecificoDel, 103) as FechaInicio FROM myTable

convert(char(10), NombreColumnaTipoDate, 103) 

 Sencillo pero útil.

 HaPPy CoDiNg :)

Wednesday, May 23, 2012

Buscar dentro De Un string case-insensitive

Cómo comparar dos cadenas sin importar si el patrón de comparación está en mayúscula o minúscula.
String.Contains efectivamente busca pero es case-sensitive. Si intentás hacerlo con String.Contains te lanza la siguiente excepción:

"Unable to cast object of type 'System.OrdinalComparer' to type 'System.Collections.Generic.IEqualityComparer`1[System.Char]'."

Esto es porque el método String.Contains no soporta comparaciones case-insensitive .

Así que la opción para hacer la comparación case-insensitive es utilizando String.IndexOf.

Yo lo empleé de la siguiente manera:
 
For Each temp As LibreriaBrinks.eCliente.clsAgencia In todas
        If (temp.Nombre_Ref.IndexOf(txtBusquedaAgencia.Text, StringComparison.OrdinalIgnoreCase) <> -1) Then
            getItemListadoAgencias(temp)
        End If
Next

Bueno, a lo que a vos te debe importar es el If, obvia el For Each. Checka que la pregunta del if lleva "<> -1". Eso es importante. Fácil, no? A mi me funcionó. Está probado en VS2008.

HaPPy CoDiNg =)

Tuesday, December 6, 2011

Padding o margin

Algo con lo que solía confundir eran el empleo de los atributos padding y margin. Una imagen vale más que mil palabras, así que la siguiente imagen muestra qué es cuál.


Como podés ver, los márgenes son el espacio que hay entre la capa y cualquier objeto adyacente. El (o padding) es el espacio entre el borde de la capa y el contenido. (El borde es la línea que delimita la capa)

MARGIN

Para establecer los márgenes mediante código CSS, exisiten distintas formas y es importante conocerlas todas para poder leer fácilmente el código css e interpretarlo. Por defecto, cada capa tiene 4 márgenes que vienen con un valor 0.

/*Aplicando los 4 márgenes de la forma natural*/
#capa    {
margin-top: 10px;
margin-right: 10px;
margin-bottom: 10px;
margin-left: 10px;
}
/*Aplicando los 4 márgenes de forma simplificada*/
#capa    {
margin: 10px;
}
/*Cuando el márgen de arriba es igual al márgen de abajo, y el márgen de la derecha es igual al márgen de la izquierda, se puede usar el siguiente formato, tomando en cuenta que el primer valor corresponde a los de arriba y abajo y el segundo valor a los de la derecha e izquierda*/
#capa   {
margin: 10px 5px;
}
/*Cuando los valores de la derecha e izquierda son los mismos y únicamente varían el de arriba con el de abajo, se procede con el siguiente formato, tomando en cuenta que el primer valor corresponde al márgen de arriba, el segundo a los de la derecha e izquierda y el tercero al de abajo*/
#capa    {
margin: 5px 15px 2px;
}
/*Cuando todos los márgenes son distintos uno del otro, entonces se procede a colocar cada valor, tomando en cuenta que el primer valor corresponde al de arriba, segundo: derecha, tercero: abajo y cuarto: izquierda (tal como las manecillas del reloj) */
#capa    {
margin: 3px 10px 6px 8px;
}

PADDING

Al igual que el MARGIN, se tiene 4 rellenos y por defecto vienen en valor 0. El código css se establece de la misma manera.

IMPORTANTE

El ancho real y el alto real de una capa se ve directamente afectado con los valores (de width y height) de sus márgenes, rellenos y bordes.

Ancho de una capa con todos sus atributos:

Ancho + margen izq. + margen der. + relleno izq. + relleno der. + borde izq. + borde der.

Esto es importante tomar en cuenta ya que afectará directamente al diseño de la página, habrá un desbordamiento.

HaPPy CoDiNg =)

Tuesday, November 8, 2011

List Of a datatable

Cómo convertir una lista genérica de objetos a una datatable. vb.NET. ASP.NET

Lo cierto es que este tema me ha interesado, aquí te va un poco más de Reflection. Por si alguna vez precisas realizar una conversión de un List Of Tu Clase a un DataTable.

Nota.- La clase a utilizar en este ejemplo, es la clase Persona, la misma que se utilizó en el post anterior.

Primero, agrego mis objetos de tipo Persona a mi List Of. Luego que la lista está llenada, la traspaso a un datatable. Recorro las propiedades de mi clase para que los nombres de éstas sean los nombres de las columnas del datatable. Acto seguido, por cada ítem de la lista, recorro cada propiedad para agregar cada valor como fila del datatable. Bueno, lo demás ya es obvio.

Imports System.Collections.Generic
Imports System.Data
Imports System.Reflection
Imports ClassLibrary3

Partial Class _Default
    Inherits System.Web.UI.Page


    Private lstPersonas As New List(Of clsPersona)

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Me.prcCrearPersona()
        Dim dt As DataTable = ConvertToDataTable(lstPersonas)
    End Sub

    Private objPersona As clsPersona

    Public Sub prcCrearPersona()
        For i As Integer = 0 To 4
            objPersona = New clsPersona
            objPersona.pNombre = "Lizzy" & i
            objPersona.pApellido = "Mendivil" & i
            Me.lstPersonas.Add(objPersona)
        Next
    End Sub

    Public Shared Function ConvertToDataTable(Of T)(ByVal list As IList(Of T)) As DataTable
        Dim dt As New DataTable()
        Dim propiedades As PropertyInfo() = GetType(T).GetProperties
        For Each p As PropertyInfo In propiedades
            dt.Columns.Add(p.Name, p.PropertyType)
        Next
        For Each item As T In list
            Dim row As DataRow = dt.NewRow
            For Each p As PropertyInfo In propiedades
                row(p.Name) = p.GetValue(item, Nothing)
            Next
            dt.Rows.Add(row)
        Next
        Return dt
    End Function

End Class


Como resultado, tendrías que tener una vista similar a esta: (claro, según tu clase)


HaPPy Coding =)

Monday, November 7, 2011

System.reflection


Qué es Reflection? Para qué sirve? En qué me es útil? Cuándo usar? Bueno, si te has hecho estas preguntas vas bien, yo también me las hice, jejeje.

Empezemos por la definición:

Reflection proporciona objetos (de tipo Type) que encapsulan ensamblados, módulos y tipos. Se puede utilizar la reflexión para crear dinámicamente una instancia de un tipo, enlazar el tipo a un objeto existente u obtener el tipo a partir de un objeto existente, e invocar sus métodos o tener acceso a sus campos y propiedades.

Reflection es una “tecnica” para poder extraer la metadata de nuestras estructuras de datos dentro de una assembly.

Reflection es la habilidad que tiene un código para revisar su propia estructura, es decir, podemos revisar la metadata que está en el assembly y manipularla a nuestro antojo.

Utilidades

Nos ayuda a consultar qué propiedades o métodos tiene un objeto en TIEMPO DE EJECUCIÓN.

Podemos diseñar un formulario dinámicamente.

Empezando a utilizar Reflection. HowTo

Hay dos formas: usando typeof() o GetType(). Ambas formas retornan un objeto tipo Type, ese es el que nos otorga a información que queremos.

Entre los principales métodos de Type están:

GetField() Obtiene el campo según el nombre.

GetMethod() Obtiene un método, y si éste tiene sobre cargas, al igual que el constructor, hay que pasarle el tipo correspondiente de la sobre carga.

GetProperty() Obtiene la propiedad según el nombre.

Nota: aparte de los métodos anteriores existen los mismos en plural, es decir que en vez de obtener un miembro, obtienes un arreglo con los resultados según los parámetros que le indiques. Ejm: GetProperty() tienes: GetProperties() el cual puedes llamar sin parámetros para obtener un PropertyInfo[] con todas las propiedades.

Let's do it. Ejemplo.

A continuación un ejemplo para fines académicos, dada una clase persona, usando reflection asignaré valores a sus propiedades. Primero lleno un diccionario cuya Key es el nombre de la propiedad de la clase y su Value obviamente el nombre que le quiero asignar a esa propiedad. Luego, recorro el diccionario para extraer sus propiedades y asignarles  un valor.

Imports System.Reflection
Imports System.Collections.Generic

Module Module1
    Sub Main()
        Dim atributosPersona As New Dictionary(Of String, String)
        atributosPersona.Add("pNombre", "Lizzy")
        atributosPersona.Add("pApellido", "Mendivil")

        Dim p As New clsPersona
        For Each atributo In atributosPersona
            Dim pf As PropertyInfo = p.GetType.GetProperty(atributo.Key)
            pf.SetValue(p, atributo.Value, Nothing)
        Next

        Console.WriteLine("Nombre: {0}", p.pNombre)
        Console.WriteLine("Apelllido: {0}", p.pApellido)
    End Sub

    Public Class clsPersona
        Private strNombre As String
        Private strApellido As String

        Public Property pNombre() As String
            Get
                Return strNombre
            End Get
            Set(ByVal value As String)
                strNombre = value
            End Set
        End Property

        Public Property pApellido() As String
            Get
                Return strApellido
            End Get
            Set(ByVal value As String)
                strApellido = value
            End Set
        End Property
    End Class
End Module

HaPPy Coding =)

Thursday, August 4, 2011

No visualizar Un subreporte / crystal reports

El ERP que estamos desarrollando actualmente en la empresa muestra sus reportes con la herramienta Crystal Reports (sin embargo, ya se tiene pensado empezar con Reporting Services 2008, mucho mejor, no?).

El punto es que el otro día yo necesitaba mostrar un subreporte pero qué pasaba si la consulta que me carga el subreporte tenía cero datos? En ese caso me mostraba el header pero en el body no había nada así que se veía muy feo. Por lo tanto, se tenía que validar para el caso que cuando no hayan datos, que ni se mande el subreporte.

A continuación les dejo en imágenes cómo hacerlo.

Primero, fíjense que mi subreporte (la parte marcada con un óvalo) esta en una sección, en la Section4.


En el código, es necesario saber la Section ya que con eso es que procedemos a ocultarlo. Lo demás la imagen lo explica sola.

Happy Coding! =)

Tuesday, July 26, 2011

Distinct en datatable

.NET VB.NET

Cuando le hacemos un select o un compute a un datatable, no tenemos la opción de hacerle un "distintc". Pero existe otra manera, utilizando Linq.

A continuación les dejo un ejemplo sencillo. Le hace un distinct a una columna y el resultado se lo inserta a un List Of.

Dim lstMonedas As New List(Of Integer)

 Dim monedas = From prod In ds.Tables(0) _
                       Select prod.Item("cfMoneNcod") _
                       Distinct


 For Each m In monedas
     lstMonedas.Add(m)
 Next

Tuesday, April 5, 2011

Cómo cargar Un combo / dropdownlist dentro De Un gridview

KeyWords: TemplateField, DropDownList en GridView

Para poder agregar un combo o dropdownlist dentro de un gridview, es necesario utilizar una columna templeteada (TempleateField).

El siguiente código en el archivo .aspx



 
    Prueba de Combo 
                                                            
     
                                                                
  
 
 


Dentro del evento del GridView llamado RowDataBound, el siguiente código


Protected Sub grvPrueba_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles grvPrueba.RowDataBound
 Try
 If e.Row.RowType = DataControlRowType.DataRow Then
  Dim combo As DropDownList = DirectCast(e.Row.FindControl("cboComboPrueba"), DropDownList)
   combo.ClearSelection()
   If combo IsNot DBNull.Value Then
      Me.prcCargarComboGridView(combo)
   End If
  End If
 Catch ex As Exception
  Throw ex
 End Try
End Sub


El siguiente código es la función que hace cargar los datos al dropDonwList. Insertalo en cualquier lugar de tu CodeBehind:


Public Sub prcCargarComboGridView(ByVal cboCombo As DropDownList)
Dim objNegocio As New clsClaseNegocios
Dim dtDatosParaCargarElCombo As DataTable = objNegocio.fncGetDatos()
  cboCombo.DataSource = dtDatosParaCargarElCombo 
            cboCombo.DataTextField = "nombre"
            cboCombo.DataValueField = "codigo"
            cboCombo.DataBind()
    End Sub


Quedaría como se muestra en la siguiente imágen:




=) HaPPy CoDiNg!

Monday, April 4, 2011

Cómo cambiar el valor De una columna De Un gridview En tiempo De ejecución

KeyWords: ASP.NET, VB.NET, GRIDVIEW

Resulta que la consulta SQL que le bindeas a tu GridView tiene un campo byte que cada número significa algo. Por ejemplo. 0: Iniciado. 1: Vigente. 2:Cancelado. 3:Terminado, etc. Y lo cierto es que no quieres mostrar este dato como número sino como texto.

Te doy tres alternativas para una solución.

Solución 1

Utilizando una columna normal (BoundField), en el evento del GridView llamado "RowDataBound", y suponiendo que la columna a la que se quiere modificar sea la 0, insertas el siguiente código:

Protected Sub grvPrueba_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles grvPrueba.RowDataBound
        Try
            
            If e.Row.RowType = DataControlRowType.DataRow Then 

                   Select Case e.Row.Cells(0).Text
                    Case 0
                        e.Row.Cells(0).Text = "Iniciado"
                    Case 1
                        e.Row.Cells(0).Text = "Vigente"
                    Case 2
                        e.Row.Cells(0).Text = "Cancelado"
                    Case 3
                        e.Row.Cells(0).Text = "Terminado"
                End Select


            End If
        Catch ex As Exception
            Throw ex
        Finally

        End Try
    End Sub

Solución 2

Utilizando una columna templeteada (TemplateField), le pones un label y llamas a una función en la cual le das el número y te devolverá el valor correspondiente.

El siguiente código, en el .aspx



fncGetEstado es la función
estado es el campo de base de datos, ese campo numérico en el se registran los estados en forma de número.

El siguiente código en el codeBihind

Public Function fncGetEstado(ByVal estado As Byte) As String

        Select Case estado
            Case 0
                Return "Iniciado"
            Case 1
                Return "Vigente"
            Case 2
                Return "Cancelado"
            Case 3
                Return "Terminado"

        End Select

    End Function

Solución 3

Otra posible solución sería que directamente hagas la modificación en tu consulta SQL y así cuando la bindees a tu GridView ya no tendrás que hacer nada. La consulta SQL sería así.

SELECT columna1, columna2, CASE columna3 WHEN 0 THEN 'Iniciado' WHEN 1 THEN 'Vigente' WHEN 2 THEN 'Cancelado' WHEN 3 THEN 'Terminado' AS estado
FROM tabla1

Ojo que ahora la columna ya no será "columna1", sino que en tu GridView debes enlanzarlo con "estado" la cual es la columna ya procesada.

=) HaPPy CoDiNg!

Wednesday, March 30, 2011

Cómo pasar Los datos De un gridview a Un datatable

ASP.NET, VB.NET

Se podría dar el caso de que las celdas de un GridView sean generadas o ingresadas por el usuario en tiempo de ejecución. Es decir, lo que se muestra en el GridView no son datos bindeados.

Para poder recuperar estos datos, no existe un método como tal. Por tanto, hay que programarlo.

Es sencillo, primero hay que crear la estructura del DataTable. Por ejemplo:

Public Sub prcCrearEstructuraDatatable()
        Dim dt As New DataTable
        dt.Columns.Add("inProdNcod")
        dt.Columns.Add("inProdCodg")
        dt.Columns.Add("vtLisDPrec")
        dt.Columns.Add("vtLisDDsct")
        dt.Columns.Add("vtLisDMoni")
        dt.Columns.Add("vtLisDMarg")
        dt.Columns.Add("vtLisMNcod")
        dt.Columns.Add("vtLisDNcod")
        Me.ViewState("dtDetalle") = dt
    End Sub


(Meto el DataTable dentro de un ViewState para luego poder manipular la tabla en cualquier momento)

Luego de haber cargado los datos al Gridview, los cuales se desea guardarlos, le hacemos un For Each y metemos en cada fila del DataTable lo que hay en cada celda del GridView, las celdas que deseemos. Para ello, recuperamos la estructura del DataTable la cual está en el ViewState. Y al final, hacemos el caso inverso, asignamos lo que hay en el DataTable ahora al ViewState (esto es para la manipulación posterior de los datos)

Public Function fncCargarDataTable(ByRef strMensaje As String) As Boolean
    Me.prcCrearEstructuraDatatable()
    Dim dt As DataTable = Me.ViewState("dtDetalle")
    If Me.grvListaDePrecios.Rows.Count > 0 Then
        For Each fila As GridViewRow In Me.grvListaDePrecios.Rows
            Dim f As DataRow = dt.NewRow()
            Dim txtDescuento As TextBox = DirectCast(fila.Cells(6).Controls(1), TextBox)

            f("inProdNcod") = DirectCast(fila.Cells(8).Controls(1), Label).Text
            f("inProdCodg") = fila.Cells(1).Text
            f("vtLisDPrec") = DirectCast(fila.Cells(4).Controls(1), TextBox).Text
            f("vtLisDDsct") = IIf(txtDescuento.Text = "", "0", txtDescuento.Text)
            If txtDescuento.Text = "" Then
                txtDescuento.Text = "0"
            End If
            f("vtLisDMoni") = DirectCast(fila.Cells(4).Controls(7), DropDownList).SelectedValue
            f("vtLisDMarg") = DirectCast(fila.Cells(5).Controls(1), Label).Text
            f("vtLisMNcod") = Me.ViewState("EstadoID")
            f("vtLisDNcod") = DirectCast(fila.Cells(9).Controls(1), Label).Text

            dt.Rows.Add(f)
        Next
        Me.ViewState("dtDetalle") = dt
    Else
        strMensaje = "Debe generar la lista de precios antes de guardarla."
        Return False
    End If
    Return True
End Function

=) HaPPy CoDiNg!

Monday, March 21, 2011

Cómo obtener los textpath De Los nodos padres


TreeView, ASP.NET, VB.NET Selected Node Text Path

Un TreeNode tiene como propiedad el ValuePath, con esa propiedad se puede obtener la ruta de los valores dado un nodo hasta llegar al nodo raíz. Por ejemplo: ---> 0/1/2/3/4

Si, ahora, estás buscando cómo obtener la ruta del text... buscando un TextPath? No hay, qué raro. Si hay un ValuePath, por qué no hicieron un TextPath. En fin, como no hay, hay que hacerlo :P A mi me tocó hacerlo pues lo necesitaba para obtener algo asi como en la siguiente imágen:



Dado un nodo seleccionado, se obtiene la ruta de los text a partir de ahí hasta el nodo raíz. Tiene el formato: Parent - Child1 - Child11 - Child111 ... Si no le colocas el "-" Usará el separador que por defecto pone el lenguaje "/"

El código:


Protected Sub trvListaDePrecios_SelectedNodeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles trvListaDePrecios.SelectedNodeChanged
        Dim nodo As TreeNode = Me.trvListaDePrecios.SelectedNode
        Dim strTextPath As String = nodo.Text
        Dim strSeparador As String = "-"
        Me.trvListaDePrecios.PathSeparator = CChar(strSeparador)
        While Not nodo.Parent Is Nothing
            strTextPath = nodo.Parent.Text & " " & Me.trvListaDePrecios.PathSeparator & " " & strTextPath
            nodo = nodo.Parent
        End While
        Dim strValuePath As String = Me.trvListaDePrecios.SelectedNode.ValuePath
        Me.prcCargarDatosPopUp(strValuePath, strTextPath.ToUpper())
    End Sub

HaPPy CoDiNg =)

Tuesday, March 15, 2011

Convert.ToInt32 vs CInt

Ambas sentencias devuelven el mismo valor:




Dim d1 As Double = 5.5
Dim i1 As Integer = Convert.ToInt32(d1)

Dim d2 As Double = 5.5
Dim i2 As Integer = CInt(d2)




Si estás usando Visual Basic .NET tal vez te has preguntado cuál es la diferencia de usar Convert.ToInt32 o CInt, o si es indiferente o cuándo usar lo uno y cuándo lo otro.

Microsoft recomienda usar CInt a utilizar el método de Convert.ToInt32 de .NET Framework ¿Por qué? Porque esta función se compila en línea, es decir, el código de conversión forma parte del código que evalúa la expresión. A veces no se produce una llamada a un procedimiento para realizar la conversión, lo que mejora el rendimiento.

Good Coding! =)