【问题标题】:Is it possible to bind a control to two data source controls?是否可以将一个控件绑定到两个数据源控件?
【发布时间】:2018-02-10 18:03:29
【问题描述】:

我有一个 DetailsView 控件。在EditItemTemplate 中,我将`TextBox** 替换为DropDownList

对于DropDownList,有XmlDataSource

<EditItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server" Height="22px" Width="130px"
    SelectedValue='<%# Bind("team") %>' DataSourceID="XmlDataSource1" 
    DataTextField="companyname" DataValueField="companyname">
</asp:DropDownList>

<asp:XmlDataSource ID="XmlDataSource1" runat="server" 
DataFile="~/App_Data/xml/teams.xml"></asp:XmlDataSource>

</EditItemTemplate>

问题出在: 对于 DetailsView 控件,我将 DataSource 作为 SqlDataSource

这是否意味着我正在尝试将一个控件绑定到两个不同的数据源?如何绑定 DropDownList1 以便我能够保存 SelectedValue 并且不会出现以下错误?

当我尝试编辑时出现以下错误

'DropDownList1' 有一个无效的 SelectedValue,因为它确实 项目列表中不存在。参数名称:value 说明:An 当前 web 执行过程中发生未处理的异常 要求。请查看堆栈跟踪以获取有关 错误以及它起源于代码的位置。

异常详细信息:System.ArgumentOutOfRangeException: 'DropDownList1' 有一个无效的 SelectedValue,因为它不存在于 物品清单。参数名称:值

来源错误:

在执行过程中产生了一个未处理的异常 当前的网络请求。有关原产地和位置的信息 可以使用下面的异常堆栈跟踪来识别异常。

堆栈跟踪:

[ArgumentOutOfRangeException: 'DropDownList1' 有一个 SelectedValue 这是无效的,因为它不存在于项目列表中。 参数名称:值]

【问题讨论】:

    标签: c# asp.net webforms


    【解决方案1】:

    您所绑定的内容与价值之间存在矛盾。您正在绑定团队,但值是公司名称,它们应该匹配。

    <asp:DropDownList ID="DropDownList1" runat="server" Height="22px" Width="130px"
        SelectedValue='<%# Bind("team") %>' DataSourceID="XmlDataSource1" 
        DataTextField="companyname" DataValueField="companyname">
    </asp:DropDownList>
    

    【讨论】:

    • 谢谢@wazz,但它不起作用你正确地指出了矛盾,但 'team'Sqldatasource 的表中的字段名,它是(绑定到 GridView) 更新表所需的,'companyname' 来自绑定到 dropdownlist1 的 XmlDataSource。我将公司名称更改为团队。
    • 对不起,我的意思是,我认为您可以这样做,但数据源和代码中的名称必须相同。我不认为数据源必须完全相同(?),但它必须看起来相同。例如,如果您有一个必须返回的数据库的先前版本,您可以,因为它在结构上是相同的,但在物理上并不相同。 xml文件在使用前可以改一下吗?
    【解决方案2】:

    这可能会帮助其他用户 -

    我没有将 EditItemTemplate (DetailsView) 的 DropDownList 绑定到任何特定的 DataSource,而是通过使用 ItemUpding 事件来实现。所以我完全避免了 SelectedValue=''

    HTML 代码现在看起来像这样 -

    <asp:DropDownList ID="DropDownList1" runat="server" Height="22px" Width="130px"
                            DataSourceID="XmlDataSource1" DataTextField="team" DataValueField="team" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
                        </asp:DropDownList>
    

    后面的代码现在看起来像这样 -

     protected void DetailsView1_ItemUpdating(object sender, DetailsViewUpdateEventArgs e)
    
    
             {
                    DropDownList dropDownList = (DropDownList)DetailsView1.FindControl("DropDownList1");
    
                    SqlDataSource1.UpdateParameters["team"].DefaultValue = dropDownList.SelectedValue;
        }
    

    【讨论】:

      猜你喜欢
      • 2011-01-01
      • 1970-01-01
      • 2011-11-05
      • 1970-01-01
      • 1970-01-01
      • 2012-09-01
      • 1970-01-01
      • 2010-10-16
      • 2011-11-14
      相关资源
      最近更新 更多