none
Cargar un campo tipo string en un checkbox RRS feed

  • Pregunta

  • Buenas, poseo a nivel de bd (sql server 2008) el siguiente sp               

     SELECT  CODIGO_TIPOQUEJA,NOTIFICA_INGRESO

     FROM QUEJAS.TIPOQUEJA    
      ORDER BY CODIGO_TIPOQUEJA ASC                     
    END
    GO

    Ahora bien,el campo NOTIFICA_INGRESO tipo varchar(3), solo acepta "S" y "N" , la llave Codigo es tipo varchar (5)

    Ocupo cargar en un gridview estos campos y el de tipo checkbox, cuando entro a la pagina ocupo que los checkbox se mantengan seleccionados donde se encuentra ingresado "S" en la bd.

    public static List<MantenimientosEntidad> ObtenerTipoQueja()
            {
                Database db = DatabaseFactory.CreateDatabase();
                DbCommand dbc = db.GetStoredProcCommand("spObtenerTipoQueja");
                IDataReader reader = db.ExecuteReader(dbc);
                List<MantenimientosEntidad> lstMantenimientos = new List<MantenimientosEntidad>();
                while (reader.Read())
                {
                    MantenimientosEntidad tmp = new MantenimientosEntidad();
                    tmp.CODIGO_TIPOQUEJA = reader["CODIGO_TIPOQUEJA"].ToString();
                    tmp.NOTIFICA_INGRESO = reader["NOTIFICA_INGRESO"].ToString();
                    lstMantenimientos.Add(tmp);
                }
                reader.Close();
                return lstMantenimientos;
            }

    Y el gridview seria

                                   <asp:GridView ID="gdvTipoQueja" runat="server" AllowPaging="True" 
                                                            AutoGenerateColumns="False" EmptyDataText="No existen datos registrados" 
                                                            DataKeyNames="nOTIFICA_INGRESO,nOTIFICA_ATENCION,nOTIFICA_RECHAZO,nOTIFICA_CIERRE,cODIGO_TIPOQUEJA" 
                                                            EnableModelValidation="True" GridLines="Horizontal" Height="16px" PageSize="5" 
                                                            ShowFooter="True" style="color: #000000" Width="524px" AllowSorting="True" >
                                                            <Columns>
                                                                <asp:TemplateField HeaderText="Código" ItemStyle-VerticalAlign="Bottom">
                                                                    <ItemTemplate>
                                                                        <asp:Label ID="lbCodigo" runat="server" 
                                                                            Text='<%# Bind("CODIGO_TIPOQUEJA") %>'></asp:Label>
                                                                    </ItemTemplate>
                                                                    <ItemStyle VerticalAlign="Bottom" Width="80px" />
                                                                </asp:TemplateField>
                                                                  <asp:TemplateField HeaderText="Ingreso" ItemStyle-VerticalAlign="Bottom">
                                                         <ItemTemplate>
                                                                        <asp:CheckBox ID="checkIngreso" runat="server" AutoPostBack="True"
                                                                        Checked='<%# Eval("NOTIFICA_INGRESO") %>' Visible="true"
                                                                     OnCheckedChanged="checkIngreso_checkedChanged"/>    
                                                         </ItemTemplate>
                                                                    <HeaderStyle HorizontalAlign="Center" />
                                                                    <ItemStyle HorizontalAlign="Center" />
                                                    </asp:TemplateField>
                                                            </Columns>
                                                        </asp:GridView>

    He realizado este ejercicio con campos booleanos, pero en caso de string no poseo experiencia. La bd no puede ser modificada por locual los 2 campos deben seguir en tipo varchar

    Saludos


    • Editado gwebb06 lunes, 20 de octubre de 2014 4:56 Ajuste
    lunes, 20 de octubre de 2014 4:16

Respuestas

  • hola

    si vas a crear dos propiedades en el objeto no necesitas aplicar un if, lo haces directo

    public class Class1{
    
       public string NotificarIngreso {get; set;}
    
       public bool NotificarIngresoExt {
    
            get{ return this.NotificarIngreso == "S"; }
    
       }
    
    }


    asi directo la segunda propeidad es de solo lectura ya que es calculada en base a la primera

    tambien podrias ahcer lo contrario, asignar la bool y en base a esta obtener la de string

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta gwebb06 martes, 21 de octubre de 2014 1:57
    lunes, 20 de octubre de 2014 23:41

Todas las respuestas

  • Aunque el campo NOTIFICA_INGRESO no se pueda cambiar en la base de datos y deba seguir siendo varchar, nada te impide que la clase MantenimientosEntidad defina el dato como booleano. A la hora de cargarla, haces la conversión con el DataReader:

    tmp.NOTIFICA_INGRESO = reader["NOTIFICA_INGRESO"].ToString() == "S";

    Evidentemente, la línea anterior presume que has cambiado el tipo en la definición de la clase.

    lunes, 20 de octubre de 2014 8:14
  • Aunque el campo NOTIFICA_INGRESO no se pueda cambiar en la base de datos y deba seguir siendo varchar, nada te impide que la clase MantenimientosEntidad defina el dato como booleano. A la hora de cargarla, haces la conversión con el DataReader:

    tmp.NOTIFICA_INGRESO = reader["NOTIFICA_INGRESO"].ToString() == "S";

    Evidentemente, la línea anterior presume que has cambiado el tipo en la definición de la clase.

    tenia en mente crear 2 tipos de valores

    NOTIFICA INGRESO BOOL

    NOTIFICA INGRESO STRING

    donde una vez que asigno al tipo string

    tmp.NOTIFICA_INGRESO = reader["NOTIFICA_INGRESO"].ToString() ; (string)

    LLega la condicion para llenar el de tipo bool

    if(tmp.NOTIFICA_INGRESO A_INGRESO=="S")

    {

    tmp.NoTIFICA_INGRESO (BOOL) ==TRUE;

     }

    ELSE

    tmpNotifica_INGRESO  (BOOL)==false;


    Que opinas al respecto?

    lunes, 20 de octubre de 2014 20:12
  • hola

    si vas a crear dos propiedades en el objeto no necesitas aplicar un if, lo haces directo

    public class Class1{
    
       public string NotificarIngreso {get; set;}
    
       public bool NotificarIngresoExt {
    
            get{ return this.NotificarIngreso == "S"; }
    
       }
    
    }


    asi directo la segunda propeidad es de solo lectura ya que es calculada en base a la primera

    tambien podrias ahcer lo contrario, asignar la bool y en base a esta obtener la de string

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta gwebb06 martes, 21 de octubre de 2014 1:57
    lunes, 20 de octubre de 2014 23:41