是否可以将控件绑定到两个数据源控件?

时间:2018-02-10 18:03:29

标签: c# asp.net webforms

我有一个DetailsView控件。在<?php header('Access-Control-Allow-Origin: "*"'); header('Content-Type: application/json'); echo file_get_contents('manifest.json'); ?> 中,我将`TextBox **替换为 DropDownList

对于EditItemTemplate,有DropDownList

XmlDataSource

问题在这里: 对于 DetailsView 控件,我将 DataSource 设为 SqlDataSource

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

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

  

&#39; DropDownList1&#39;有一个SelectedValue,它是无效的,因为它确实如此   项目列表中不存在。参数名称:value描述:An   在执行当前Web期间发生了未处理的异常   请求。请查看堆栈跟踪以获取有关的更多信息   错误以及它在代码中的起源。

     

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

     

来源错误:

     

执行期间生成了未处理的异常   当前的网络请求。有关的来源和位置的信息   可以使用下面的异常堆栈跟踪来识别异常。

     

堆栈追踪:

     

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

2 个答案:

答案 0 :(得分:0)

你的约束力与价值之间存在矛盾。你是绑定团队,但价值是公司名称,他们应该匹配。

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

答案 1 :(得分:0)

这可能有助于其他用户 -

我没有将EditItemTemplate(DetailsView)的DropDownList绑定到任何特定的DataSource,而是使用ItemUpding事件实现了这一点。所以我完全避免 SelectedValue =&#39;&lt;%#Bind(&#34; team&#34;)%&gt;&#39;

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;
    }