2011-04-28 4 views
0

J'ai essayé de passer des données sélectionnées de deux dropdownlist (page1.aspx) à (page2.aspx) Je n'ai pas de chance car il semble que les données ne sont pas transmises lors de la sélection. Aidez s'il vous plaît, ceci ne semble pas si difficile, mais je ne peux pas le faire fonctionner. Sur (page2.aspx) les données des listes déroulantes seront transmises à une procédure stockée et tous les résultats seront dans une grille.passer les données de la liste déroulante

Voici mon code:

Page1.aspx

<asp:DropDownList ID="ddlState" runat="server" AutoPostBack="True" DataSourceID="SqlDataSource1" DataTextField="ST_Code" DataValueField="ST_Code" /> 
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:dbConnection %>"SelectCommand="SELECT [ST_Code] FROM [State]"> 
</asp:SqlDataSource> City: <asp:DropDownList ID="ddlCity" runat="server" DataSourceID="SqlDataSource2" DataTextField="RS_City" DataValueField="RS_City" /> 
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:dbConnection %>"SelectCommand="ListbyStateSPROC"SelectCommandType="StoredProcedure">` 
     <SelectParameters> 
      <asp:ControlParameter ControlID="ddlState" Name="State" PropertyName="SelectedValue" Type="String" />  
     </SelectParameters> 
</asp:SqlDataSource> 

     <asp:Button ID="Submit" runat="server" Text="Submit" /> 
    &nbsp; 

</asp:Content> 

Page1.aspx.vb

Imports System.Data 
Imports System.Data.Common 
Imports System.Data.SqlClient 
Imports System.Web.UI.WebControls.DataGrid 
Imports System.Web.UI.WebControls.DropDownList 


Partial Public Class LiveEventSearch 
    Inherits System.Web.UI.Page 

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

    End Sub 

    Public Sub ddlState_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) 
     SqlDataSource2.SelectParameters.Clear() 
     SqlDataSource2.SelectParameters.Add(New Parameter("@State", DbType.String, ddlState.SelectedValue)) 
     ddlCity.DataBind() 


    End Sub 

    Protected Sub ddlCity_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ddlCity.SelectedIndexChanged 

    End Sub 


    Protected Sub Submit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Submit.Click 

    End Sub 
End Class 

Page2.aspx

<asp:GridView ID="GridView1" runat="server" AllowSorting="True" AutoGenerateColumns="False" 
     DataSourceID="SqlDataSource1" Style="z-index: 100; left: 324px; position: absolute; 
     top: 226px"> 
     <Columns> 
      <asp:BoundField DataField="Code" HeaderText="Code" ReadOnly="True" SortExpression="R_Code" /> 
      <asp:BoundField DataField="Name" HeaderText="Name" ReadOnly="True" SortExpression="R_Name" /> 
      <asp:BoundField DataField="Number" HeaderText="Number" ReadOnly="True" SortExpression="RS_Number" /> 
      <asp:BoundField DataField="Addr_1" HeaderText="Addr_1" ReadOnly="True" SortExpression="RS_Addr_1" /> 
      <asp:BoundField DataField="City" HeaderText="City" ReadOnly="True" SortExpression="RS_City" /> 
      <asp:BoundField DataField="State" HeaderText="State" ReadOnly="True" SortExpression="RS_State" /> 
      <asp:BoundField DataField="RS_Zip" HeaderText="RS_Zip" ReadOnly="True" SortExpression="RS_Zip" /> 
     </Columns> 
    </asp:GridView> 
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:dbConnection %>" 
     SelectCommand="ListbyCityStSPROC" SelectCommandType="StoredProcedure"> 
     <SelectParameters> 
      <asp:QueryStringParameter Name="City" QueryStringField="RS_City" Type="String" /> 
      <asp:QueryStringParameter Name="State" QueryStringField="ST_Code" Type="String" /> 
     </SelectParameters> 
    </asp:SqlDataSource> 

</asp:Content> 
+0

est votre SqlDataSource2 encore en vie à travers des appels page? N'avez-vous pas besoin de le stocker dans l'objet session? –

+0

@Tony Le Tiger, SqlDataSource2 est ouvert sur page1.aspx uniquement. On m'a dit que l'utilisation de la session n'est pas une bonne idée, mais qu'aviez-vous en tête? – FluxEngine

Répondre

0

efficacement chaque page dans un L'application ASP.NET est comme une seule application en elle-même, les choses ne durent pas sur plusieurs pages, vous devez donc implémenter une classe qui conserve votre SQLDataSource pour pouvoir l'appeler sur plusieurs pages ou implémenter un moyen de copier les données sur les pages.

Vous pouvez également utiliser la fonction FindControl pour trouver le SQLDataSource sur plusieurs pages:

SqlDataSource sql = (SqlDataSource)Page.Master.Findcontrol("SqlDataSource1"); 
+0

ok, donc ce code irait-il dans le code2.hind de code2.aspx? Je ne sais toujours pas comment ça se passe. – FluxEngine

+0

@user vous devriez vraiment lire sur le fonctionnement des pages ASP.NET, mais vous devez utiliser findcontrol à la page 2 si le contrôle est défini à la page 1 et inverser s'il est inversé –

+1

Merci pour votre contribution est grandement appréciée. – FluxEngine

Questions connexes