Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DropDownList OnSelectedIndexChanged-取消所选值_C#_Asp.net - Fatal编程技术网

C# DropDownList OnSelectedIndexChanged-取消所选值

C# DropDownList OnSelectedIndexChanged-取消所选值,c#,asp.net,C#,Asp.net,我有一个面板,其中包含一个ListView和一个itemTemplate,每个元素包含一个dropdowlist、两个文本框和一个delete按钮 每个Listview元素的每个dropdownlist都包含相同的数据,即数据源中的值列表,但所选值在不同的行中是不同的。某些值可以相同,这取决于约束 对于dropdownlist中的某些元素,这个约束条件是,我可以在两行上具有相同的值 我将dropdownlist与OnSelectedIndexChanged事件绑定,并在设计中将autoPostb

我有一个面板,其中包含一个ListView和一个itemTemplate,每个元素包含一个dropdowlist、两个文本框和一个delete按钮

每个Listview元素的每个dropdownlist都包含相同的数据,即数据源中的值列表,但所选值在不同的行中是不同的。某些值可以相同,这取决于约束

对于dropdownlist中的某些元素,这个约束条件是,我可以在两行上具有相同的值

我将dropdownlist与OnSelectedIndexChanged事件绑定,并在设计中将autoPostback设置为True:

<asp:DropDownList ID="ddlLinkToDestinationParent" CssClass="ddl-link-to ddl-link-to-child" runat="server"  AutoPostBack="True" OnSelectedIndexChanged="ddlNewConsumptionLinkToDestinationParent_OnSelectedIndexChanged" data-headcount='<%# Eval("HeadCount") %>' />
方法IsDestinationSelected允许知道是否找到具有此值和约束的dropdownlist。如果为true,我想取消dropdownlist中的选定项

错误消息之后我可以写什么

我尝试了一些解决方案,但没有什么有趣的。。。(320仅用于测试,但为列表项):

这是我的列表项:

ddl.SelectedIndex = ddl.Items.IndexOf(ddl.Items.FindByValue("320"));
<select name="ctl00$Main$lvSetConsumptionsSite$ctrl1$ddlLinkToDestinationParent" onchange="javascript:setTimeout('__doPostBack(\'ctl00$Main$lvSetConsumptionsSite$ctrl1$ddlLinkToDestinationParent\',\'\')', 0)" id="ctl00_Main_lvSetConsumptionsSite_ctrl1_ddlLinkToDestinationParent" class="ddl-link-to ddl-link-to-child" data-headcount="0">
    <option value="">--- Type de consom° ---</option>
    <option value="870">petit dejeuner 1 siege</option>
    <option value="877">petit dejeuner 2 (siege)</option>
    <option value="133">dejeuner 1 siege</option>
    <option value="26">dejeuner 2 (siege)</option>
    <option value="237">dejeuner 3 (siege)</option>
    <option value="238">dejeuner 4 (siege)</option>
    <option value="239">dejeuner 5 (siege)</option>
    <option value="241">dejeuner 6 (siege)</option>
    <option value="288">dejeuner 7 (siege)</option>
    <option value="852">pique nique (gouter 1 siege)</option>
    <option value="507">diner 1 (siege)</option>
    <option value="883">test 20/09 (diner - siege)</option>
    <option value="136">Goûter 2 (siege)</option>
    <option value="134">Resident (pas dans CM)</option>
    <option value="24">pertes (diner - siege)</option>
    <option value="25">cessions (pas dans CM)</option>
    <option value="201">Taxes et Frais divers (pas dans CM)</option>
    <option value="227">Emballages (consignes et déconsignes)</option>
    <option value="135">Diners de luxe (pas dans CM)</option>
    <option selected="selected" value="320">ajustement de stock</option>
    <option value="334">autre</option>
    <option value="745">HAPPY</option>
    <option value="876">consommation</option>
    <option value="802">test AB Cons 3105 01</option>
    <option value="869">panier repas (pas dans CM)</option>
    <option value="915">1 dest. siege</option>
    <option value="953">collation de 11h</option>

</select>

---德康森型°---
小德琼纳1号围城
小德琼纳2号(围城)
德琼纳1号围城
德琼纳2号(围城)
德琼纳3号(围城)
德琼纳4号(围城)
德琼纳5号(围城)
德琼纳6号(围城)
德琼纳7号(围城)
皮克·尼克(古特1攻城)
食客1(围城)
测试20/09(餐厅-围攻)
围城2(围城)
居民(帕斯丹斯CM)
珀特斯(餐厅-围城)
特许经营权(pas dans CM)
税收和税收潜水员(pas dans CM)
大使馆(收货人和收货人)
豪华餐厅(帕斯丹CM)
库存调整
奥特雷
高兴的
联合体
测试AB Cons 3105 01
panier repas(帕斯丹厘米)
1目的地。围攻
11h校勘
但当我试图更改我的值或我的项目时,我会在另一个时间调用我的事件,但选择了值后,也会调用无限循环

你有什么想法吗


谢谢你的回答

在事件处理程序中,只需执行以下操作:

ddl.ClearSelection();
var collectionToBindTo = Db.GetMyItems();
Dictionary<int, string> originalValues; 
foreach (var item in collectionToBindTo)
{
    originalValues.Add(item.Id, item.SomeValue);
} 
dropdownlist.DataSource = collectionToBindTo;
dropdownlist.DataBind();
// now add the collection to the session
另外,请确保在加载页面的
if(!isPostBack)
块中对值进行数据绑定,以防止出现意外结果

评论后更新:

正如我所说的,您需要某种原始值的持久性。有几种方法可以实现这一点:

1。)
SelectedIndexChanged
事件中执行比较操作,如果他无法执行,则查询数据库以获取原始值,并使用它在dropdownlist中选择它

2。)绑定DropDownList时,可以将这些原始值存储在以下字典中:

ddl.ClearSelection();
var collectionToBindTo = Db.GetMyItems();
Dictionary<int, string> originalValues; 
foreach (var item in collectionToBindTo)
{
    originalValues.Add(item.Id, item.SomeValue);
} 
dropdownlist.DataSource = collectionToBindTo;
dropdownlist.DataBind();
// now add the collection to the session
var collectionToBindTo=Db.GetMyItems();
词典原值;
foreach(collectionToBindTo中的var项目)
{
添加(item.Id,item.SomeValue);
} 
dropdownlist.DataSource=collectionToBindTo;
dropdownlist.DataBind();
//现在将集合添加到会话中
其中int是键(可能是项的Id?),字符串是原始值。然后,您必须将此集合存储在会话中,例如,这样您就可以在回发之间检索它,而无需重新查询数据库

我猜您在aspx文件中使用的是元素数据源,所以第二个对您来说是非常困难的。您可以做的是使用第一个选项,如果不经常访问数据库,这非常容易


希望它有意义。它不是复制粘贴解决方案,您需要改变这些想法以满足您的需要。

在事件处理程序中,只需执行以下操作:

ddl.ClearSelection();
var collectionToBindTo = Db.GetMyItems();
Dictionary<int, string> originalValues; 
foreach (var item in collectionToBindTo)
{
    originalValues.Add(item.Id, item.SomeValue);
} 
dropdownlist.DataSource = collectionToBindTo;
dropdownlist.DataBind();
// now add the collection to the session
另外,请确保在加载页面的
if(!isPostBack)
块中对值进行数据绑定,以防止出现意外结果

评论后更新:

正如我所说的,您需要某种原始值的持久性。有几种方法可以实现这一点:

1。)
SelectedIndexChanged
事件中执行比较操作,如果他无法执行,则查询数据库以获取原始值,并使用它在dropdownlist中选择它

2。)绑定DropDownList时,可以将这些原始值存储在以下字典中:

ddl.ClearSelection();
var collectionToBindTo = Db.GetMyItems();
Dictionary<int, string> originalValues; 
foreach (var item in collectionToBindTo)
{
    originalValues.Add(item.Id, item.SomeValue);
} 
dropdownlist.DataSource = collectionToBindTo;
dropdownlist.DataBind();
// now add the collection to the session
var collectionToBindTo=Db.GetMyItems();
词典原值;
foreach(collectionToBindTo中的var项目)
{
添加(item.Id,item.SomeValue);
} 
dropdownlist.DataSource=collectionToBindTo;
dropdownlist.DataBind();
//现在将集合添加到会话中
其中int是键(可能是项的Id?),字符串是原始值。然后,您必须将此集合存储在会话中,例如,这样您就可以在回发之间检索它,而无需重新查询数据库

我猜您在aspx文件中使用的是元素数据源,所以第二个对您来说是非常困难的。您可以做的是使用第一个选项,如果不经常访问数据库,这非常容易


希望它有意义。这不是一个复制粘贴解决方案,您需要改变这些想法以满足您的需要。

好的,我认为这可能是解决方案,但问题仍然存在。实际上,var ddl=发送方作为DropDownList;包含新选择的值,而不是我试图获取的旧值。@blasil64,您想要获取的旧值是什么?你的问题不是很清楚,也许我就是不明白。您有一个充满项目的列表视图,每个项目都有一个包含相同项目的dropdownlist。用户更改下拉列表中的选择,您想做什么?检查用户是否可以执行该操作,如果不能,是否回滚更改?当然,回发后会得到新值,这就是使用此事件的全部原因。如果你需要得到一些旧的价值,你需要某种方法来坚持/理解它。你理解了我的期望。我的dropdownlist包含值,目前有一个选定值,这是我的“旧值”。我想去c