微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 asp.net 中级联数据绑定 <ajaxtoolkit:combobox> 和 <asp:dropdownlist>

如何解决在 asp.net 中级联数据绑定 <ajaxtoolkit:combobox> 和 <asp:dropdownlist>

我有一个 asp.net 搜索表单,其中包含一个 ajaxToolkit ComboBox一个标准的 asp DropDownList。两个控件都绑定到两个单独的 sqlDatasource 组件。

像这样:

<ajaxToolkit:ComboBox
    ID="cbConvenzionato"
    runat="server"
    AutoCompleteMode="SuggestAppend"
    DropDownStyle="DropDownList"
    DataSourceID="sdsConvenzionati"
    DataTextField="nome"
    DataValueField="id"
    AutopostBack="true"
    OnSelectedindexChanged="cbConvenzionato_SelectedindexChanged" />

<asp:DropDownList
    ID="ddlVeicoli"
    DataSourceID="sdsveicoli"
    DataTextField="targa"
    DataValueField="id"
    runat="server"
    AutopostBack="true"
    OnSelectedindexChanged="ddlVeicoli_SelectedindexChanged"
    AppendDataBoundItems="true">
    <asp:ListItem Text="TUTTI" Value="" Selected="True" />
</asp:DropDownList>

<asp:sqlDataSource
    ID="sdsConvenzionati"
    runat="server"
    ConnectionString="<%$ ConnectionStrings:db %>"
    ProviderName="<%$ ConnectionStrings:db.ProviderName %>"
    SelectCommand="
        SELECT
            id,nome
        FROM
            anag_convenzionati
        ORDER BY nome;" />

<asp:sqlDataSource
    ID="sdsveicoli"
    runat="server"
    EnableCaching="false"
    CancelSelectOnNullParameter="false"
    ConnectionString="<%$ ConnectionStrings:db %>"
    ProviderName="<%$ ConnectionStrings:db.ProviderName %>"
    SelectCommand="
        SELECT 
            id,targa
        FROM 
            veicoli_contratti
        WHERE
            ((@id_convenzionato IS NULL) OR (id_convenzionato = @id_convenzionato))
        ORDER BY targa;">
    <SelectParameters>
        <asp:ControlParameter
            Name="id_convenzionato"
            ControlID="cbConvenzionato"
            PropertyName="SelectedValue"
            Direction="Input"
            ConvertEmptyStringToNull="true"
            DbType="Int32"
            DefaultValue="" />
    </SelectParameters>
</asp:sqlDataSource>

还有第三个 sqldatasource (sdsNoleggi) 提供 gridview,但现在这不是问题。

在后面的代码中,我有两个事件处理程序:

    protected void cbConvenzionato_SelectedindexChanged(object sender,EventArgs e)
    {
        sdsveicoli.Select(DataSourceSelectArguments.Empty);

        Search();
    }

    protected void ddlVeicoli_SelectedindexChanged(object sender,EventArgs e)
    {
        Search();
    }

    private void Search()
    {
        sdsNoleggi.Select(DataSourceSelectArguments.Empty);
    }

我认为我应该在 ddlVeicoli 中选择一项后过滤 cbConvenzionato 项...但它不起作用...为什么?

如果我在调试中查看 sdsveicoli SelectParameters 我可以看到 id_convenzionato 被正确设置为选定的值(id 来自 cbConvenzionato)我也打赌 {{1 }} 数据集将被正确更新为新值,因为我之前做过很多次。那么为什么绑定控制不是呢?我还尝试在 sdsNoleggi 调用后强制执行 ddlVeicoli.DataBind() ......但这没有效果

解决方法

我是这样修复的:

protected void cbConvenzionato_SelectedIndexChanged(object sender,EventArgs e)
{
    ddlVeicoli.DataSource = null;

    sdsVeicoli.Select(DataSourceSelectArguments.Empty);

    ddlVeicoli.DataSource = sdsVeicoli;
    ddlVeicoli.DataBind();

    Search();
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。