Jump to content
Xtreme .Net Talk

Recommended Posts

Posted

Hello again. It seems I only have problems...well, that's true

 

My last one, from a aspx page the users clicks on a link and a new window opens containing a form. This form has some DropDownLists and some other controls, and I have to populate these lists. Some of them can (and should) be populated on Page Load, but some others depends on the value from some of the populated_on_load DropDownLists.

 

This should not be a problem. I set the OnSelectedIndexChange event of the "prepopulated" list to wire the event to a sub, and from the sub, I populate the rest. Simple, but it is not working. And i don't know why.

 

The code from the server side:

   public empleado as String
   private query As String

   Sub Page_Load(sender As Object, e As EventArgs)
        Dim Conexion As OleDbConnection = New OleDbConnection(strConexion)
        Dim i As Integer

        If Not IsPostBack Then
            empleado = Request.QueryString("cod")
            If empleado <> "" Then
                    usuarioApertura.Text = empleado

                    'Cargamos las entidades
                    query = "SELECT CodigoEntidad FROM TCodigosEntidades"
                    Dim da As New OleDbDataAdapter(query, Conexion)
                    Dim ds As New DataSet
                    da.Fill(ds, "CodigoEntidad")
                    'Asociamos los datos necesarios al DataGrid
                    With codigoEntidad
                        .DataTextField = "CodigoEntidad"
                        .DataValueField = "CodigoEntidad"
                        .DataSource = ds
                        .DataBind()
                    End With
            End If
        End If
   End Sub

   Sub CargarTareas(sender As Object, e As System.EventArgs)
        Dim MsgBoxText As String = "Populating DropdownLists"
        MsgBox(MsgBoxText)
   End Sub

 

The HTML code in the next post, I have some weird errors posting.....

Posted

And the HTML code, as promised:

   <form runat="server">
           <div><asp:Label id="labelUsuarioApertura" runat="server">Usuario de Apertura: </asp:Label>
               <asp:Label id="usuarioApertura" runat="server"></asp:Label>
           </div>
           <div><asp:Label id="labelCodigoEntidad" runat="server">Entidad: </asp:Label>
               <DropDownList id="codigoEntidad" onSelectedIndexChange="CargarTareas" AutoPostBack="True" runat="server"></DropDownList>
           </div>
  </form>

 

The Sub CargarTareas is never reached, the Request.Params("__EVENTTARGET") has the correct object who has fired the OnClick event but the sub is not reached.

 

Any idea?

 

NOTE: I have changed the asp:_ DropDownList for DropDownList because of the board smilie convertor, it has been translated to this when posted:

<asp<img src="images/smilies/biggrin.gif" border="0" alt="" title="Big Grin" class="inlineimg" />ropDownList :rolleyes:

Posted
Dont use MsgBox' date=' use a response.write or use javascript for a prompt box.[/quote']

 

Hi Kahlua001!

 

I'm not using MsgBox, I'm using the response.write/javascript combination to pop up the messages, but to shorten the code posted, I've used the MsgBox function.

Posted

Bind your handler in codebehind, not as an attribute.

 

Sub CargarTareas(ByVal sender As Object, ByVal e As System.EventArgs) Handles codigoEntidad.SelectedIndexChanged

A man and a dog have an average of three legs.

Beaware of Statistics.

Posted
Bind your handler in codebehind, not as an attribute.

 

Sub CargarTareas(ByVal sender As Object, ByVal e As System.EventArgs) Handles codigoEntidad.SelectedIndexChanged

 

Yesterday I have tried it, but when I try to use the "Handles", the compiler told me that it needs a WithEvents clause. I'll try again using codebehind (I'm writing my server-side code "inline")

Posted

Something strange was happening, when I try to load the page, the compiler tell me that the selectedindexchange event cannot be found.

The dropdown is declared like this in the .aspx:

<asp:DropDownList id="codigoEntidad" runat="server" AutoPostBack="True" OnSelectedIndexChange="CargarTareas"></asp:DropDownList>

 

And in codebehind, I declare the control like this:

Protected WithEvents codigoEntidad As System.Web.UI.WebControls.DropDownList

 

And the event handler like this:

Sub CargarTareas(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles codigoEntidad.SelectedIndexChange

Posted

Here I post the complete code of my page, to see if anybody can help me:

<%@ Page Language="VB" EnableViewState="True"  %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.OleDb" %>
<script  runat="server">
   public empleado as String

   private strConexion As String = "PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE=" & ConfigurationSettings.AppSettings("BDTI")
   private query As String

   Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Dim Conexion As OleDbConnection = New OleDbConnection(strConexion)
        Dim ConexionExiste As OleDbConnection = New OleDbConnection(strConexion)
        Dim i As Integer

        ' Buscamos el codigo de empleado, si se ha pasado y si existe en la base de datos
        If Not IsPostBack Then
            empleado = "10251651"
            If empleado <> "" Then
                Dim strSQLExiste as String = "SELECT CodigoEmpleado FROM Personas WHERE CodigoEmpleado LIKE '" + empleado + "'"
                Dim SQLExiste as New OleDbCommand(strSQLExiste, ConexionExiste)

                ConexionExiste.Open()
                Dim drExiste as OleDbDataReader = SQLExiste.ExecuteReader()
                If drExiste.hasRows Then
                    usuarioApertura.Text = empleado

                    'Cargamos las entidades
                    query = "SELECT CodigoEntidad FROM TCodigosEntidades"
                    Dim da As New OleDbDataAdapter(query, Conexion)
                    Dim ds As New DataSet
                    da.Fill(ds, "CodigoEntidad")
                    'Asociamos los datos necesarios al DataGrid
                    With codigoEntidad
                       .selectedindex = 1
                        .DataTextField = "CodigoEntidad"
                        .DataValueField = "CodigoEntidad"
                        .DataSource = ds
                        .DataBind()
                    End With

                Else
                    MuestraAlerta("Debe indicarse un Codigo de Empleado válido")
                End If
                ConexionExiste.Close()
            Else
                MuestraAlerta("Debe indicarse un Codigo de Empleado")
            End If
       Else
       usuarioApertura.text="kestapasando"
        End If
   End Sub

   Sub MuestraAlerta(MsgBoxText As String)
        Response.Write("<script language='JavaScript'>")
        Response.Write("alert('" & MsgBoxText & "');")
        Response.Write("<" & "/script>")
        Response.Write("<script>var win = window.self;win.opener=window.self;win.close();<" + "/script>")
   End Sub

   Sub CargarTareas(ByVal sender As System.Object, ByVal e As System.EventArgs)
       Dim Conexion As OleDbConnection = New OleDbConnection(strConexion)
       Dim MsgBoxText As String = "comor" 'codigoEntidad.SelectedItem.Value
       Response.Write("<script language='JavaScript'>")
       Response.Write("alert('" & MsgBoxText & "');")
       Response.Write("<" & "/script>")
       Response.Write("<script>var win = window.self;win.opener=window.self;win.close();<" + "/script>")
       'Cargamos tipos de tareas
       query = "SELECT CodigoTipoTarea, DescripcionTipoTarea FROM TCodigosTipoTarea WHERE CodigoEntidad LIKE '" + codigoEntidad.SelectedItem.Value + "'"
       Dim da As New OleDbDataAdapter(query, Conexion)
       Dim ds As New DataSet
       da.Fill(ds, "TipoTarea")
       'Asociamos los datos necesarios al Dropdownlist
       With tipoTarea
           .DataTextField = "DescripcionTipoTarea"
           .DataValueField = "CodigoTipoTarea"
           .DataSource = ds
           .DataBind()
       End With
   End Sub
</script>
<html>
<head>
</head>
<body>
   <form id="form1" runat="server">
       <asp:Panel id="Panel1" runat="server" Width="100%">
           <div><asp:Label id="labelUsuarioApertura" runat="server">Usuario de Apertura: </asp:Label><asp:Label id="usuarioApertura" runat="server"></asp:Label>
           </div>
           <div><asp:Label id="labelCodigoEntidad" runat="server">Entidad: </asp:Label>
               <asp: DropDownList id="codigoEntidad" runat="server" AutoPostBack="True" OnSelectedIndexChange="CargarTareas"></asp: DropDownList>
           </div>
           <div><asp:Label id="labelTipoTarea" runat="server">Tipo de Tarea: </asp:Label>
               <asp: DropDownList id="tipoTarea" runat="server"></asp: DropDownList>
           </div>
           <div><asp:Label id="labelTipoSubtarea" runat="server">Tipo de Subtarea: </asp:Label>
               <asp: DropDownList id="tipoSubtarea" runat="server"></asp: DropDownList>
           </div>
       </asp:Panel>
   </form>
</body>
</html>

 

NOTE: Space included between asp and DropDownList to avoid the smilie conversion

Posted

Ok, I've found a solution, but I don't know why I have the problem I solved now.

 

Searching through the net trying to find a solution, I reached this page:

http://support.microsoft.com/default.aspx?scid=kb;en-us;314809

 

In one of the paragraphs, you can read that:

When ASP.NET renders the page to the browser, the controls that are created dynamically do not have an associated Change event. Because no event is present, ASP.NET does not save the view state. This is called View State Optimization.

 

So I have tried the solution to this, thinking that this will solve my problem. And it does. Below you can see what have I added to my code.

 

In Page_Load()

AddHandler CType(Page.FindControl("codigoEntidad"), DropDownList).SelectedIndexChanged, AddressOf CargarTareas

 

This does the trick. But I don't know why the previous code is not binding correctly the event to my handler, my control is not dinamically created.

Posted
<asp: DropDownList id="codigoEntidad" runat="server" AutoPostBack="True" OnSelectedIndexChange="CargarTareas"></asp: DropDownList>

 

 

 

I think its

 

OnSelectedIndexChanged="CargarTareas"

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...