2011-04-28 94 views
0

我一直在尝试从两个dropdownlist(page1.aspx)传递选定的数据到(page2.aspx)我没有任何运气,因为它似乎没有被选中时传递数据。请帮助,这似乎并不困难,但我无法得到它的工作。在(page2.aspx)上,下拉列表中的数据将被传递给一个存储过程,所有结果都将在gridview中。从下拉列表中传递数据

这里是我的代码:

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

是你SqlDataSource2至今仍然在页面调用活着吗?你不需要将它存储在会话对象中吗? – 2011-04-28 13:44:48

+0

@Tony The Tiger,SqlDataSource2仅在page1.aspx上打开。我被告知在这里使用会话不是一个好主意,但是你有什么想法? – FluxEngine 2011-04-28 13:55:44

回答

0

有效地在每一页ASP.NET应用程序就像一个单独的应用程序本身并不会跨越页面,因此您需要实现一个保持SQLDataSource的类,以便跨页面调用它,或者需要实现一些方法在页面之间复制数据。

你也可以使用FindControl函数来查找所有网页的SqlDataSource:

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

好的,那么这段代码会进入page2.aspx代码隐藏吗?我仍然有点不确定它是如何通过的。 – FluxEngine 2011-04-28 14:28:39

+0

@user你真的应该了解ASP.NET页面是如何工作的,但是如果控件在页面1中定义,则需要在页面2中使用findcontrol,如果是反向,则需要反向 – 2011-04-28 14:36:44

+1

谢谢您的输入,非常感谢。 – FluxEngine 2011-04-28 14:53:37