如何从另一个DropDownList过滤DropDownList(SPDataSource + ControlParameter方式)

时间:2011-06-28 12:54:58

标签: sharepoint

我正在尝试将两个DropDownList( ddlCountry和ddlCity )连接在一起。我希望当用户更改Country时,ddlCity会更新。

为此,我创建了两个列表:

·国家/地区(ID,标题)

·城市(ID,标题,国家/地区) [国家/地区是查询字段]

然后我创建了一个ASPX页面,其中2个DropDownList通过2个SPDataSource(dsCountry和dsCity)连接到Country和City。

当我加载页面时,City DropDownList相应地填充到Country DropDownList,但是当我更改Country时,没有任何反应,ddlCity总是显示null 这是我的代码:

<SharePoint:SPDataSource runat="server" DataSourceMode="List" UseInternalName="true"    selectcommand="<Query><OrderBy><FieldRef Name='Title' /></OrderBy></Query>" id="dsCountry">
    <SelectParameters>
        <asp:Parameter Name="ListName" DefaultValue="Country"/> 
    </SelectParameters>
</SharePoint:SPDataSource>

<p>Country: 
<asp:DropDownList runat="server" id="ddlCountry" DataValueField="Title" DataTextField="Title" DataSourceID="dsCountry" AutoPostBack="True" />
</p>

<SharePoint:SPDataSource runat="server" DataSourceMode="List" UseInternalName="true"    selectcommand="<Query><Where><Eq><FieldRef Name="Country" /><Value Type="Lookup">{country}</Value></Eq></Where></Query>"    id="dsCity">
    <SelectParameters>
        <asp:parameter DefaultValue="City" Name="ListName"></asp:parameter>
        <asp:controlparameter name="country" controlid="ddlCountry" propertyname="SelectedValue"/>
    </SelectParameters>
</SharePoint:SPDataSource>
<p>City:  
<asp:DropDownList runat="server" id="ddlCity" DataValueField="Title" DataTextField="Title" DataSourceID="dsCity" />
</p>

请注意:

·在ddlCountry中AutoPostBack = True

·在dsCity中,在CAML查询中有一个名为“country”的参数,通过ControlParameter连接到ddlCountry

我不明白为什么我的过滤在我改变国家时不起作用...我可以看到页面重新加载,但没有任何反应......任何建议?

2 个答案:

答案 0 :(得分:0)

变量不应该是:

{$country}

有兴趣知道您是否找到了解决方案。

答案 1 :(得分:0)

我意识到这是严重的线索坏死,但如果您仍然感兴趣,或者其他任何人通过Google发现这一点......

尝试将第二个(已过滤)下拉列表的EnableViewState属性设置为false。这将强制控件从SPDataSource获取一组新数据(使用新过滤器),而不是从视图状态返回之前获取其先前的设置。

有关此特定示例的this page,请查看this page以了解有关View State及其功能的更全面概述。