绑定下拉列表的数据和返回值

时间:2011-11-18 01:42:26

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

我是asp.net和c#的新手我希望得到一些关于dropdownlist的帮助。我想从下拉列表中的Students表返回特定学生的ClassName值。我还希望下拉列表中包含StudentClasses表中的所有ClassNames。但我的代码后面会返回下拉列表中的任何值。

有人可以告诉我我做错了吗?

我有一个名为StudentClasses的表,其中包含以下数据,例如:

ClassID        ClassName
==
1              5B 
2              6C
3              K/1F

我有另一个名为Students的表,其中StudentClasses的ClassID是外键,例如:

StudentID      FirstName  LastName   ClassID
==
1              John       Smith      1
2              Sarah      Jones      2
3              Billy      Cain       2

我想在页面上返回以下内容:

Class将是StudentClasses中所有className的下拉列表,并显示John Smith的Class,5B。 名字和姓氏是文本框。 我还有一个更新按钮,所以我也可以编辑细节 要编辑类,他们只能从下拉列表中选择。

First Name: John    Last Name: Smith      Class: 5B

这是aspx页面背后的代码。

protected void rptStudents_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    DropDownList ddlClassName = (DropDownList)e.Item.FindControl("ddlClassName");

    ddlClassName.DataTextField = "ClassName";
    ddlClassName.DataValueField = "ClassID";

    //this is the object that is bound to this particular item (row)
    StudentClass className = (StudentClass)e.Item.DataItem;

    //TO DO: student should contain class id instead of name.
    ddlClassName.SelectedValue = (className.ClassID).ToString();

    //to do get list of class items here and set datasource and then databind();

    Result<List<StudentClass>> result = StudentClassController.GetAllStudentClasses();
    ddlClassName.DataSource = result.Data;
    ddlClassName.DataBind();
}

1 个答案:

答案 0 :(得分:2)

确保您的控件设置为AutoPostBack = true,而在Page_Load()上,您不会调用任何会删除或覆盖下拉列表内容的内容。具体来说,我总是总是通过做像

这样的事情搞砸自己
protected void Page_Load(object sender, EventArgs e)
{
    PopulateDropDownList();
}

但实际上你需要说

protected void Page_Load(object sender, EventArgs e)
{
   if (!IsPostBack)
   {
      PopulateDropDownList();
   }
}

我在跟踪代码时遇到一些麻烦而不知道类结构和内容,但这里有一段代码,我在我们的应用程序中使用文本和值填充下拉列表:

    EmployeeList allemployees = EmployeeManager.GetList();

    EmployeeEDropDownList.Items.Clear();
    EmployeeEDropDownList.Items.Add("");  //add a blank item on top to simulate no selection
    foreach (Employee currentemp in allemployees)
    {
        EmployeeEDropDownList.Items.Add(new ListItem(currentemp.Name.FullNameE, currentemp.EmployeeID.ToString()));
    }

也许这会给你一个替代的想法。在我看来,这比你所拥有的更简单,更容易理解,但就像我说的,没有看到你的整个申请,我无法做出那样的判断:)

希望这有帮助。