如何从下拉列表中保存数据?

时间:2009-10-08 08:07:14

标签: c# .net asp.net drop-down-menu

我有一个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();  
}

2 个答案:

答案 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//
        } 
    }
}