none
Llenar un dropdownlist desde base de datos y si no se encuentra el dato por defecto colocar valor RRS feed

  • Pregunta

  • hola tengo un gridview donde muestro datos de un alumno que esta anotado en un curso y tiene que rendir materias y tiene tantos periodos para rendir. Los datos del grid serian: Materia-FechaExamen-NroPeriodo-FueraPeriodo, donde Fuera de periodo es un campo booleano que seteo si el alumno no puede dar el examen por enfermedad y va a la tabla .- Donde fueraPeriodo es un dropdownlist y tiene como valores Si y No

    En fin, la cuestion es que tengo que llenar el grid con datos de tabla Rinde, pero si el alumno no rindio el examen se tiene que poner por defecto que Fuera Periodo es No. La pregunta es como es el codigo HTML del grid? y el RowDataBound me da error

    Aca muestro mi codigo:

    <asp:GridView ID="gvCalendario" runat="server" AutoGenerateColumns="False" DataKeyNames="OIDCalendario, OIDMateria, NroInstancia"
             RowStyle-HorizontalAlign="Justify"  AutoGenerateButton="False" Font-Bold="False"
                 EnableTheming="True" Height="92px" BorderColor="#CCCCCC" BorderStyle="None"
             BorderWidth="1px" CellPadding="3" Font-Names="Century Gothic" Font-Size="Small" BackColor="White" HorizontalAlign="Center"   
            OnRowCancelingEdit="gvCalendario_RowCancelingEdit" OnRowEditing="gvCalendario_RowEditing"
           OnRowUpdating="gvCalendario_RowUpdating" OnRowCreated="gvCalendario_RowDataBound"> 
        
           <Columns>     
            <asp:BoundField DataField="OIDCalendario" HeaderText="OIDCalendario" Visible="False" />
            <asp:BoundField DataField="OIDMateria" HeaderText="OIDMateria" Visible="False" />
            
         <asp:TemplateField HeaderText="Materia" HeaderStyle-HorizontalAlign="Left">
            <ItemTemplate>
                <asp:Label ID="lblName" runat="server" Text='<%# Bind("Nombre") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>    
     
         <asp:TemplateField HeaderText="FechaExamen" HeaderStyle-HorizontalAlign="Left">
            <ItemTemplate>
                <asp:Label ID="lblFechaExamen" runat="server"  Text='<%# Bind("FechaExamen", "{0:dd/MM/yyyy}") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>     
     
       <asp:TemplateField HeaderText="Instancia" HeaderStyle-HorizontalAlign="Left">
            <ItemTemplate>
                <asp:Label ID="lblInstancia" runat="server" Text='<%# Bind("NroInstancia") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
       
          <asp:TemplateField HeaderText="Fuera Periodo">
          <EditItemTemplate>
                <asp:DropDownList ID="ddlPendiente" runat="server" DataTextField="FueraPeriodo" DataValueField="FueraPeriodo" > </asp:DropDownList>
           </EditItemTemplate> 
       <ItemTemplate>
            <asp:DropDownList ID="ddlPendiente" runat="server" Autopostback="true"  OnSelectedIndexChanged="ddlPendiente_SelectedIndexChanged"> 
             
            </asp:DropDownList>
        </ItemTemplate>  
      
    </asp:TemplateField>

     

     

        protected void gvCalendario_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                DropDownList ddl_Pendiente = (DropDownList)e.Row.FindControl("ddlPendiente");
               
                string idP = Session["idPersona"].ToString();
                Guid oidPer = new Guid(idP);
              
                string idC = gvCalendario.DataKeys[e.Row.RowIndex].Values[0].ToString();
                Guid oidC = new Guid(idC);

                string idD = Session["idDictado"].ToString();
                Guid oidD = new Guid(idD);
                string idM = gvCalendario.DataKeys[e.Row.RowIndex].Values[1].ToString();
                Guid oidM = new Guid(idM);

                string id = Session["idOportunidad"].ToString();
                Guid oidO = new Guid(id);
               
                id = Session["idPlan"].ToString();
                Guid oidP = new Guid(id);
                DataSet ds = GestionPlan.ObtenerPlan(oidP, oidO);

                int inasistencia = Int32.Parse(ds.Tables[0].Rows[0]["Inasistencia"].ToString());
                int instancias = Int32.Parse(ds.Tables[0].Rows[0]["InstanciasExamen"].ToString());

                //se obtiene la nota minima de la materia de la cual se van a ingresar las notas de examen
                //----------------------------------------------------------------------------------------
                DataSet dss = GestionPlanMat.ObtenerPlanMat(oidP, oidO);
                int notaMinima = Int32.Parse(dss.Tables[0].Rows[0]["NotaMinima"].ToString());

                DataSet dsss = new DataSet();
                if (inasistencia > 0)
                {
                    dsss = GestionRinde.ObtenerRinde(oidPer, oidC, oidD, oidM, notaMinima, instancias, inasistencia);
                }
                if (inasistencia == 0)
                {
                    dsss = GestionRinde.ObtenerRinde(oidPer, oidC, oidD, oidM, notaMinima, instancias);
                }

                if (dsss.Tables[0].Rows.Count == 0)
                {
                    ddl_Pendiente.DataTextField = "No";
                    ddl_Pendiente.DataValueField = "False";
                   
                    ddl_Pendiente.DataBind();
                
                }
                else if (dsss.Tables[0].Rows.Count > 0)
                {
                    ddl_Pendiente.DataSource = dsss.Tables[0];
                    ddl_Pendiente.DataTextField = "FueraPeriodo";
                    ddl_Pendiente.DataValueField = "FueraPeriodo";
                   
                    ddl_Pendiente.DataBind();
                 
                }                       


            }
        }

    jueves, 19 de agosto de 2010 22:11

Respuestas

  • hola

    estas parte me suena sospechosa

    if (dsss.Tables[0].Rows.Count == 0)
    {
         ddl_Pendiente.DataTextField = "No";
         ddl_Pendiente.DataValueField = "False";
                   
         ddl_Pendiente.DataBind();
                
    }

    estas asignando las propeidades  DataTextField y DataValueField pero no defines el DataSource, si quieres agregar un item no concteto esa no es la forma

    ComboBox - DropDownList – Opción “Todos”

    por ahi puedes definir directo el item

    <asp:DropDownList ID="DropDownList2" runat="server" AppendDataBoundItems="true" >
        <asp:ListItem Value="False">No</asp:ListItem>
    </asp:DropDownList>

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta tabaressa domingo, 22 de agosto de 2010 15:51
    viernes, 20 de agosto de 2010 3:05

Todas las respuestas

  • hola

    estas parte me suena sospechosa

    if (dsss.Tables[0].Rows.Count == 0)
    {
         ddl_Pendiente.DataTextField = "No";
         ddl_Pendiente.DataValueField = "False";
                   
         ddl_Pendiente.DataBind();
                
    }

    estas asignando las propeidades  DataTextField y DataValueField pero no defines el DataSource, si quieres agregar un item no concteto esa no es la forma

    ComboBox - DropDownList – Opción “Todos”

    por ahi puedes definir directo el item

    <asp:DropDownList ID="DropDownList2" runat="server" AppendDataBoundItems="true" >
        <asp:ListItem Value="False">No</asp:ListItem>
    </asp:DropDownList>

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta tabaressa domingo, 22 de agosto de 2010 15:51
    viernes, 20 de agosto de 2010 3:05
  • Hola Leandro, muchas gracias por responder . Me ha servido tu respuesta, finalmente consegui que funcionara, de esta manera.

     

    La grilla me quedo asi:

     

    <asp:GridView ID="gvCalendario" runat="server" AutoGenerateColumns="False" DataKeyNames="OIDCalendario, OIDMateria, NroInstancia"
             RowStyle-HorizontalAlign="Justify"  AutoGenerateButton="False" Font-Bold="False"
                 EnableTheming="True" Height="92px" BorderColor="#CCCCCC" BorderStyle="None"
             BorderWidth="1px" CellPadding="3" Font-Names="Century Gothic" Font-Size="Small" BackColor="White" HorizontalAlign="Center"   
            OnRowCancelingEdit="gvCalendario_RowCancelingEdit" OnRowEditing="gvCalendario_RowEditing"
           OnRowUpdating="gvCalendario_RowUpdating" OnRowCreated="gvCalendario_RowDataBound"> 
        
           <Columns>     
            <asp:BoundField DataField="OIDCalendario" HeaderText="OIDCalendario" Visible="False" />
            <asp:BoundField DataField="OIDMateria" HeaderText="OIDMateria" Visible="False" />
            
         <asp:TemplateField HeaderText="Materia" HeaderStyle-HorizontalAlign="Left">
            <ItemTemplate>
                <asp:Label ID="lblName" runat="server" Text='<%# Bind("Nombre") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>    
     
         <asp:TemplateField HeaderText="FechaExamen" HeaderStyle-HorizontalAlign="Left">
            <ItemTemplate>
                <asp:Label ID="lblFechaExamen" runat="server"  Text='<%# Bind("FechaExamen", "{0:dd/MM/yyyy}") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>     
     
       <asp:TemplateField HeaderText="Instancia" HeaderStyle-HorizontalAlign="Left">
            <ItemTemplate>
                <asp:Label ID="lblInstancia" runat="server" Text='<%# Bind("NroInstancia") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
       
          <asp:TemplateField HeaderText="Fuera Periodo">
              <EditItemTemplate>
                    <asp:DropDownList ID="ddlPendiente" runat="server" >
                        <asp:ListItem Value="True" Text="Si"></asp:ListItem>
                        <asp:ListItem Value="False" Text="No" Selected="True"></asp:ListItem>
                    </asp:DropDownList>
            </EditItemTemplate> 
              <ItemTemplate>
                  <asp:DropDownList ID="ddlPendiente" runat="server" >
                    <asp:ListItem Value="False">No</asp:ListItem>
                    <asp:ListItem Value="True" Text="Si"></asp:ListItem>
                </asp:DropDownList>
            </ItemTemplate>

    </asp:TemplateField>        

         <asp:TemplateField HeaderText="Edit" ShowHeader="False" HeaderStyle-HorizontalAlign="Left">
            <EditItemTemplate>
                <asp:LinkButton ID="lbkUpdate" runat="server" CausesValidation="True" CommandName="Update" Text="Update"></asp:LinkButton>
                <asp:LinkButton ID="lnkCancel" runat="server" CausesValidation="False" CommandName="Cancel" Text="Cancel"></asp:LinkButton>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:LinkButton ID="lnkEdit" runat="server" CausesValidation="False" CommandName="Edit" Text="Edit"></asp:LinkButton>
            </ItemTemplate>
        </asp:TemplateField>
       
            </Columns>
         <HeaderStyle BackColor="#FF9900" ForeColor="#666666" Font-Bold="True"
                Font-Names="Century Gothic" Font-Size="Small"/>
             <RowStyle HorizontalAlign="Justify" ForeColor="#000066" />
             <FooterStyle BackColor="White" ForeColor="#000066" />
        <PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" />
             <SelectedRowStyle BackColor="#999999" Font-Bold="True" ForeColor="#333333" />
    </asp:GridView>

     

    y el rowdatabound de esta manera:

     

     protected void gvCalendario_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                DropDownList ddl_Pendiente = (DropDownList)e.Row.FindControl("ddlPendiente");
               
                string idP = Session["idPersona"].ToString();
                Guid oidPer = new Guid(idP);
              
                string idC = gvCalendario.DataKeys[e.Row.RowIndex].Values[0].ToString();
                Guid oidC = new Guid(idC);

                string idD = Session["idDictado"].ToString();
                Guid oidD = new Guid(idD);
                string idM = gvCalendario.DataKeys[e.Row.RowIndex].Values[1].ToString();
                Guid oidM = new Guid(idM);

                string id = Session["idOportunidad"].ToString();
                Guid oidO = new Guid(id);
               
                id = Session["idPlan"].ToString();
                Guid oidP = new Guid(id);
                DataSet ds = GestionPlan.ObtenerPlan(oidP, oidO);

                int inasistencia = Int32.Parse(ds.Tables[0].Rows[0]["Inasistencia"].ToString());
                int instancias = Int32.Parse(ds.Tables[0].Rows[0]["InstanciasExamen"].ToString());

                //se obtiene la nota minima de la materia de la cual se van a ingresar las notas de examen
                //----------------------------------------------------------------------------------------
                DataSet dss = GestionPlanMat.ObtenerPlanMat(oidP, oidO);
                int notaMinima = Int32.Parse(dss.Tables[0].Rows[0]["NotaMinima"].ToString());

                DataSet dsss = new DataSet();
                if (inasistencia > 0)
                {
                    dsss = GestionRinde.ObtenerRinde(oidPer, oidC, oidD, oidM, notaMinima, instancias, inasistencia);
                }
                if (inasistencia == 0)
                {
                    dsss = GestionRinde.ObtenerRinde(oidPer, oidC, oidD, oidM, notaMinima, instancias);
                }
                if (dsss.Tables[0].Rows.Count > 0)
                {
                    DataRowView dRowView = e.Row.DataItem as DataRowView;
                    if (sender != ddl_Pendiente)
                    {                 
                        foreach (DataRow row in dsss.Tables[0].Rows)
                        {
                            bool valor = Convert.ToBoolean(row["FueraPeriodo"].ToString());
                            ddl_Pendiente.SelectedValue = valor.ToString();
                        }
                      
                    }
                }
            }

     

    Saludos desde Uruguay!!!!

    domingo, 22 de agosto de 2010 15:50