【问题标题】:Need a Gridview to Change when DropDownList changesDropDownList 更改时需要更改 Gridview
【发布时间】:2014-03-31 15:53:54
【问题描述】:

我在 ASP.Net 中有一个下拉列表(我正在使用 VB.Net),我的 ASP.Net 代码如下。我想做的是让 Girdview 从 DropDownList 动态填充。如果选择了第一个选项(不显示任何内容),我希望 Gridview 中的所有内容都可以显示。如果选择了其他选项之一,我希望 GridView 基于该选项进行过滤。我可以看到 DropDownList,但 Gridview 中没有显示任何内容。我想这个问题与以某种方式将 DropDownList 绑定到 Gridview 有关。

提前致谢。

    <%@ Page Title="Home Page" Language="VB"  AutoEventWireup="true"      CodeBehind="Default.aspx.vb" Inherits="SAP._Default" %>


    <%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="cc1" %>



    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
        <title>Tab Container Tips & Tricks</title>
    </head>
    <body>
    <form id="form1" runat="server">
    <div>   

         <cc1:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
    </cc1:ToolkitScriptManager>
        <cc1:TabContainer ID="TabContainer1" runat="server" ActiveTabIndex="0">

            <cc1:TabPanel ID="TabPanel1" runat="server" HeaderText="Screening">
                <ContentTemplate>
                    <asp:Label ID="Label2" runat="server" Text="Pull For Screening "></asp:Label>



    <asp:DropDownList ID="DropDownList1" runat="server"><asp:ListItem>10</asp:ListItem>
    <asp:ListItem>20</asp:ListItem>
    </asp:DropDownList>



    <asp:Button ID="Button1" runat="server" Text="Add Applicants" />



                    <asp:Label ID="Label3" runat="server" Text="Choose Campus: "></asp:Label>
                    <asp:DropDownList ID="DropDownList2" runat="server" AutoPostBack="True">
                         <asp:ListItem></asp:ListItem>
                        <asp:ListItem Text="All" Value="%"></asp:ListItem>
                        <asp:ListItem>RC</asp:ListItem>
                        <asp:ListItem>HS</asp:ListItem>
                        <asp:ListItem>TL</asp:ListItem>
                        <asp:ListItem>PH</asp:ListItem>
                    </asp:DropDownList>
                    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
                        ConnectionString="<%$ ConnectionStrings:ScreenerView %>" ProviderName="<%$ ConnectionStrings:ScreenerView.ProviderName %>" 
                        SelectCommand="SELECT [ScreenerID], [LEGAL_FNAME], [LEGAL_LNAME], [APPL_PERSON_ID], [AAMC_ID], [GENDER], [URM], [RecMCAT], [SciGPA], [LEGAL_RES_STATE_CD], [PullDate], [First] FROM [vw_Screener]" 
                        FilterExpression="Screener ID LIKE '?' AND First LIKE '?'">
                        <SelectParameters>
                            <asp:Parameter Name="intS" />
                        </SelectParameters>

                        <FilterParameters>
            <asp:ControlParameter ControlID="DropDownList2"   PropertyName="SelectedValue" />

          </FilterParameters> 
    </asp:SqlDataSource>


                    <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" CellPadding="4" ForeColor="#333333" GridLines="None">
                        <AlternatingRowStyle BackColor="White" />
                        <Columns>
     <asp:BoundField DataField="ScreenerID" HeaderText="ScreenerID"   SortExpression="ScreenerID" Visible="False"></asp:BoundField>
    <asp:BoundField DataField="LEGAL_FNAME" HeaderText="First Name" SortExpression="LEGAL_FNAME" />
    <asp:BoundField DataField="LEGAL_LNAME" HeaderText="Last Name" SortExpression="LEGAL_LNAME" />
    <asp:BoundField DataField="APPL_PERSON_ID" HeaderText="APPL_PERSON_ID" SortExpression="APPL_PERSON_ID" Visible="False" />
    <asp:BoundField DataField="AAMC_ID" HeaderText="AAMC" SortExpression="AAMC_ID" />
    <asp:BoundField DataField="GENDER" HeaderText="Gender" SortExpression="GENDER" />
    <asp:BoundField DataField="URM" HeaderText="URM" SortExpression="URM" />
    <asp:BoundField DataField="RecMCAT" HeaderText="MCAT" SortExpression="RecMCAT" />
    <asp:BoundField DataField="SciGPA" HeaderText="Sci. GPA" SortExpression="SciGPA" />
    <asp:BoundField DataField="LEGAL_RES_STATE_CD" HeaderText="State" SortExpression="LEGAL_RES_STATE_CD" />
     <asp:BoundField DataField="PullDate" HeaderText="Date Pulled" DataFormatString = "{0:d}"   SortExpression="PullDate" />
    <asp:BoundField DataField="First" HeaderText="First Choice CC" SortExpression="First" />
</Columns>
                        <EditRowStyle BackColor="#2461BF" />
                        <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
                        <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
                        <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
                        <RowStyle BackColor="#EFF3FB" />
                        <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
                        <SortedAscendingCellStyle BackColor="#F5F7FB" />
                        <SortedAscendingHeaderStyle BackColor="#6D95E1" />
                        <SortedDescendingCellStyle BackColor="#E9EBEF" />
                        <SortedDescendingHeaderStyle BackColor="#4870BE" />
     </asp:GridView>




     </ContentTemplate>




    </cc1:TabPanel>

【问题讨论】:

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


    【解决方案1】:

    您需要在 SQLDataSource 中修复 FilterExpression 和 FilterParements:

    在您的 ASPX 文件中您需要进行以下更改:

    FilterParameters: 此列表中的项目将由 FilterExpression 使用。如果这是 emtpy,那么您的 FilterExpression 将无法使用。但是,您有一个项目,现在您必须将其链接到具有索引的 FilterExpression。由于您有 ONE 项目,因此其索引将为 0(请参阅下面的过滤器表达式)。我假设它是 [ScreenerID] 所以它可能是 Int32?然后你需要指定它并设置一个默认值:

    <FilterParameters>
        <asp:ControlParameter Name="ScreenerID" ControlID="DropDownList2"
        PropertyName="SelectedValue" Type="Int32" DefaultValue="" />
    </FilterParameters>
    

    FilterExpression: 你现在拥有它的方式是不正确的,因为它没有与任何实际值链接,比如 User-Interace (Dropdown) 。您必须根据其在 FilterParameter 项中的索引/位置链接它。就像我们上面说的,因为 ScreenerID 是第一项,所以它的索引为 0:

    FilterExpression="ScreenerID = {0}"
    

    DropDownList2:既然你已经有了AutoPostBack="True",你只需要添加事件OnSelectedIndexChanged="DropDownList2_SelectedIndexChanged"

    如果 ScreenID 是整数,则需要从 ALL 项的 value 字段中删除 %,如下所示:&lt;asp:ListItem Value="" Text="ALL&gt;

    VB.NET 代码隐藏:在您的DropDownList2_SelectedIndexChanged 事件中不要在其中放入任何代码。像这样:

    Protected Sub DropDownList2_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DropDownList2.SelectedIndexChanged    
        'Leave empty
    End Sub
    

    如果这对您不起作用,请告诉我,我可以在您了解更多信息后更新此答案。

    【讨论】:

    • LucidGold,感谢您的回复。我现在的代码(部分)如下所示: 页面加载正常,但没有任何数据网格视图。当我更改下拉列表时,它显然正在处理。谢谢您的帮助!
    • 最后一个问题——我需要在后面的代码中添加什么吗?我正在使用 VB.Net
    • 我添加了一些更新以使答案更清晰
    • 在你的数据库中你确定 ScreenerID 是一个 Int 吗?
    猜你喜欢
    • 1970-01-01
    • 2018-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    相关资源
    最近更新 更多