передавать данные из выпадающего списка

#asp.net #vb.net #gridview #drop-down-menu

#asp.net #vb.net #просмотр сетки #выпадающее меню

Вопрос:

Я пытался передать выбранные данные из двух выпадающих списков (страница 1.aspx) в (страница 2.aspx) Мне не повезло, так как кажется, что данные не передаются при выборе. Пожалуйста, помогите, это не кажется таким уж сложным, но я не могу заставить это работать. На (страница 2.aspx) данные из выпадающих списков будут переданы хранимой процедуре, и все результаты будут представлены в виде сетки.

Вот мой код:

Страница 1.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" />
    amp;nbsp;

</asp:Content>
  

Страница 1.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
  

Страница 2.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>
  

Комментарии:

1. ваш SqlDataSource2 все еще активен при вызовах страницы? Вам не нужно сохранять их в объекте сеанса?

2. @Tony The Tiger, SqlDataSource2 открыт только на странице 1.aspx. Мне сказали, что использовать session здесь не очень хорошая идея, но что вы имели в виду?

Ответ №1:

Фактически каждая страница в ASP.NET приложение само по себе похоже на отдельное приложение, его содержимое не сохраняется на разных страницах, поэтому вам либо нужно реализовать класс, который хранит ваш SqlDataSource, чтобы вызывать его на разных страницах, либо вам нужно реализовать какой-то способ копирования данных на страницах.

Вы также могли бы использовать функцию FindControl для поиска источника SqlDataSource на разных страницах:

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

Комментарии:

1. хорошо, так будет ли этот код помещен в page2.aspx codebehind? Я все еще немного не уверен, как это передается.

2. @user вам действительно следует прочитать о том, как ASP.NET страницы работают, но да, вам нужно использовать findcontrol на странице 2, если элемент управления определен на странице 1, и reverse, если он обратный