ASP.NET DropDownList中的非数据绑定值问题

时间:2010-05-09 07:54:45

标签: asp.net

我正在尝试将 [所有地区] 项目“注入”我的区域下拉列表,如下所示:

    <asp:DropDownList ID="regionList" runat="server" AutoPostBack="true" AppendDataBoundItems="true" Width="200px" DataSourceID="regionDataSource" DataTextField="Desc"
        DataValueField="RegionId">
        <asp:ListItem Selected="True" Value="">[All Regions]</asp:ListItem>
    </asp:DropDownList>
    <asp:SqlDataSource ID="regionDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:ProVantageMediaManagement %>" SelectCommand="SELECT [RegionId], [Desc] FROM [ListRegions] ORDER BY [Desc]">
    </asp:SqlDataSource>

对于某个地区的出租车排名,我也有一个等级下拉列表,其中包含以下选择参数:

<asp:ControlParameter ControlID="regionList" Name="RegionId" PropertyName="SelectedValue" Type="Int32" DefaultValue="" ConvertEmptyStringToNull="true" />

排名的数据来源:

    <asp:SqlDataSource ID="rankDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:ProVantageMediaManagement %>" SelectCommand="SELECT [RankId], [Name] FROM [ListRanks] WHERE [RegionId] = ISNULL(@RegionId, [RegionId]) ORDER BY [Name]">
        <SelectParameters>
            <asp:ControlParameter ControlID="regionList" Name="RegionId" PropertyName="SelectedValue" Type="Int32" DefaultValue="" ConvertEmptyStringToNull="true" />
        </SelectParameters>
    </asp:SqlDataSource>

因此,预期的行为是,当选择 [所有区域] 时,排名下拉列表应获得空参数,而mt SQL将为所有区域选择所有排名。我知道我的SQL使用null参数,但当我在区域列表中选择 [All Regions] 时,rank下拉列表不是数据绑定。当我从数据库中选择一个区域时它会绑定,但是当我再次选择 [所有区域] 时,它会保持该绑定。我做错了什么?

2 个答案:

答案 0 :(得分:0)

尝试在代码中添加所有区域

这是一种方式

  protected void Page_Load(object sender, EventArgs e)
    {
        regionList.DataBound += new EventHandler(dl_DataBound);
    }

    void dl_DataBound(object sender, EventArgs e)
    {
        regionList.Items.Add(new ListItem("[All Regions]"));
    }

答案 1 :(得分:0)

这是让它运作的另一种方法

     <asp:DropDownList ID="regionList" runat="server" AutoPostBack="true" AppendDataBoundItems="true" Width="200px" DataSourceID="regionDataSource" DataTextField="Desc"
    DataValueField="RegionId">
</asp:DropDownList>
<asp:SqlDataSource ID="regionDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:ProVantageMediaManagement %>" SelectCommand="SELECT null as [RegionId], '[All Regions]' as [Desc] UNION SELECT [RegionId], [Desc] FROM [ListRegions] ORDER BY [Desc]">
</asp:SqlDataSource>

注意我拿出了列表项并使用SQL将值添加到数据源中,我将其从袖带上写下来,因此您可能需要对其进行测试。