我有一个FormView,其中包含5个动态DropDownLists。通过动态,我的意思是下拉列表可以增加或减少 - 取决于我在数据库中有多少问题。
当我点击“保存”按钮时,我可以检索并存储文本框的内容。但是我无法检索DropDownLists。
其中一个问题是,在单击“保存”按钮后,DropDownLists的ID会更改名称。
为什么呢?因为在我的DropDownLists的数据绑定时,我重命名了ID,以便我可以识别哪个是哪个并将相应的数据存储在数据库中。
我不确定我是否“攻击”这一切都错了。
这是我的aspx代码:
<asp:FormView runat="server" (...)>
//Lots of textfields here
<asp:Repeater runat="server" id="myRepeater"> //Datasource is bound in codebehind.
<ItemTemplate>
<li>
<div class="value"> <asp:DropDownList id="score" runat="server" OnDataBinding="hotelCriterias_DataBinding" /> </div>
</li>
</ItemTemplate>
</asp:Repeater>
</asp:FormView>
这里我重命名ID并数据源数据源
protected void myDropDownList_DataBinding(object sender, EventArgs e)
{
DropDownList ddl = (DropDownList)(sender);
ddl.ID = "question" + Eval("questionID").ToString(); //Rename ID to 'question1, question2...)
Repeater rep = (Repeater)myFormView.FindControl("myRepeater");
rep.DataSource = this.dtQuestions;
rep.DataBind();
}
答案 0 :(得分:0)
尝试使用ObservableCollection对象类作为下拉列表和数据库访问之间的中介。
通过将基于ObservableCollection的类设置为列表的数据上下文并处理DataContextChanged事件,您将始终知道正在显示哪些数据,而不必担心跟踪它的显示位置。
答案 1 :(得分:0)
当你点击保存按钮时,你需要迭代你的转发器,应该像
protected void btnSave_Click(object sender, EventArgs e)
{
if (Repeater1.Items.Count > 0)
{
for (int count = 0; count < Repeater1.Items.Count; count++)
{
DropDownList ddl = (DropDownList)Repeater1.Items[count].FindControl("ddl");
ddl.SelectedValue//
}
}
}