为下拉列表绑定数据并返回值

本文关键字:返回值 数据 绑定 下拉列表 | 更新日期: 2023-09-27 18:14:57

我是asp.net和c#的新手,我想得到一些下拉列表的帮助。我想在下拉列表中返回Students表中特定学生的ClassName值。我还希望用StudentClasses表中的所有classname填充下拉列表。但是我后面的代码确实在下拉列表中返回任何值。

谁能告诉我我做错了什么?

我有一个名为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。"名"answers"姓"是文本框。我也有一个更新按钮,所以我可以编辑细节要编辑Class,他们只能从下拉列表中选择。

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();
}

为下拉列表绑定数据并返回值

确保您的控件设置为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()));
    }

也许这会给你另一种想法。在我看来,这比你的更"简单",更容易理解,但就像我说的,没有看到你的整个应用程序,我真的不能做出这样的判断:)