【问题标题】:pass data from dropdownlist从下拉列表中传递数据
【发布时间】:2011-04-28 13:41:32
【问题描述】:

我一直在尝试将选定的数据从两个下拉列表 (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>

【问题讨论】:

  • 您的 SqlDataSource2 在页面调用中是否仍然存在?不需要将其存储在会话对象中吗?
  • @Tony The Tiger ,SqlDataSource2 仅在 page1.aspx 上打开。有人告诉我,在这里使用 session 不是一个好主意,但你有什么想法?

标签: asp.net vb.net gridview drop-down-menu


【解决方案1】:

实际上,ASP.NET 应用程序中的每个页面本身就像一个应用程序,事情不会跨页面持续存在,因此您要么需要实现一个类来保持 SQLDataSource 以便可以跨页面调用它,要么您需要实现某种方式来跨页面复制数据。

您还可以使用 FindControl 函数跨页面查找 SQLDataSource:

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

【讨论】:

  • 好的,那么这段代码会放在 page2.aspx 代码隐藏中吗?我仍然有点不确定它是如何通过的。
  • @user 您应该真正了解 ASP.NET 页面的工作原理,但是如果控件是在第 1 页中定义的,则需要在第 2 页中使用 findcontrol,如果是反向的,则需要使用反向
  • 非常感谢您的意见。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-22
  • 1970-01-01
  • 2016-01-19
相关资源
最近更新 更多