2010-05-09 73 views
0

我想“注入”的[所有地区]项目到我的区域下拉菜单,如下所示:问题与ASP.NET的DropDownList非数据绑定值

<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]时,等级下拉列表不是数据绑定。当我从DB中选择一个区域时,它会绑定,但当我再次选择[所有区域]时,它会保持该绑定。我究竟做错了什么?

+0

你可以发布你的绑定代码以及代码,你在哪里得到'regionList'的值? – Oded 2010-05-09 08:20:36

+0

@Oded,我在那个阶段唯一的其他代码(我留下数据绑定并在后面填充代码)是列表的数据源,我已经包含了这些数据源。 – ProfK 2010-05-09 08:53:33

+0

@ProfK - 你解决了这个问题吗?你应该发布一个答案,如果你有。 – Niklas 2012-02-28 15:08:21

回答

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将值添加到数据源,我把它从袖口写下来,所以你可能需要测试它。

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]")); 
    }