我有一个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 这是无效的,因为它不存在于项目列表中。 参数名称:值]
答案 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;
}