我有一个面板,其中包含一个ListView和一个itemTemplate,每个元素包含一个下拉列表、两个文本框和一个delete按钮。
每个Listview元素的每个下拉列表都包含相同的数据,一个来自数据源的值列表,但是所选的值在不同的行中是不同的。确定的值可以是相同的,它取决于一个约束。
对于我的下拉列表中的一些元素,这个约束是我可以在两行上具有相同的值。
我将下拉列表与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") %>' />我通过我的事件(服务器端)。
var ddl = sender as DropDownList;
if (IsDestinationSelected(ddl))
{
// Display error message
// cancel the selection of my dropdownlist or select another value...
}方法IsDestinationSelected允许知道是否找到具有此值和约束的下拉列表。如果为真,则要取消下拉列表中选定的项。
在错误消息之后我能写什么?
我尝试了一些解决办法,但没有干预.(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>但是当我试图改变我的值或我的项目时,我调用另一个时间我的事件,但是选择的值,也无限循环.
你有什么主意吗?
谢谢你的回答!
发布于 2013-04-19 10:26:01
在您的事件处理程序中,只需执行以下操作:
ddl.ClearSelection();此外,请确保将if(!isPostBack)块中的值绑定到Page_Load中,以防止意外的结果。
注释后的更新:
正如我已经说过的,您需要一些原始值的持久性。实现这一目标的方法有几种:
)1.)在SelectedIndexChanged事件中的执行您的比较操作,如果他无法执行该操作,则查询数据库以获取原始值,并使用它在下拉列表中选择它。
)当您绑定下拉列表时,2.)存储这些原始值,可能在这样的字典中:
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 sessionint是键的位置(可能是项目的Id?)字符串是原始值。然后,您必须将这个集合存储在会话中,这样您就可以在回发之间检索它,而不必请求数据库。
我猜您在aspx文件中使用了一个元素DataSource,所以第二个操作对您来说是相当困难的。相反,您可以使用第一个选项,如果不经常访问数据库,这是非常容易的。
希望这有意义。这不是一个复制和粘贴的解决方案,你需要改变这些想法,以满足你的需要。
https://stackoverflow.com/questions/16102371
复制相似问题