Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 绑定数据并返回下拉列表的值_C#_Asp.net_Data Binding_Drop Down Menu - Fatal编程技术网

C# 绑定数据并返回下拉列表的值

C# 绑定数据并返回下拉列表的值,c#,asp.net,data-binding,drop-down-menu,C#,Asp.net,Data Binding,Drop Down Menu,我对asp.net和c非常陌生,我想获得一些关于dropdownlist的帮助。我想从下拉列表中的Students表中返回特定学生的ClassName值。我还希望用StudentClasses表中的所有类名填充下拉列表。但是我的代码隐藏确实返回下拉列表中的任何值 First Name: John Last Name: Smith Class: 5B 有人能告诉我我做错了什么吗 我有一个名为StudentClass的表,其中包含以下数据,例如: ClassID Cl

我对asp.net和c非常陌生,我想获得一些关于dropdownlist的帮助。我想从下拉列表中的Students表中返回特定学生的ClassName值。我还希望用StudentClasses表中的所有类名填充下拉列表。但是我的代码隐藏确实返回下拉列表中的任何值

First Name: John    Last Name: Smith      Class: 5B
有人能告诉我我做错了什么吗

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

ClassID        ClassName
==
1              5B 
2              6C
3              K/1F
我有另一个名为StudentClasses的表,其中StudentClasses的ClassID是外键,例如:

StudentID      FirstName  LastName   ClassID
==
1              John       Smith      1
2              Sarah      Jones      2
3              Billy      Cain       2
我想在我的页面视图中返回以下内容:

班级将是学生班级中所有班级名称的下拉列表,并显示约翰·史密斯的班级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();
}
protectedvoid\u ItemDataBound(对象发送方,RepeaterItemEventArgs e)
{
DropDownList ddlClassName=(DropDownList)e.Item.FindControl(“ddlClassName”);
ddlClassName.DataTextField=“ClassName”;
ddlClassName.DataValueField=“ClassID”;
//这是绑定到此特定项(行)的对象
StudentClass类名=(StudentClass)e.Item.DataItem;
//要做的事情:学生应该包含类id而不是名称。
ddlClassName.SelectedValue=(className.ClassID).ToString();
//在这里获取类项列表,设置datasource,然后设置databind();
结果=StudentClassController.GetAllStudentClasses();
ddlClassName.DataSource=result.Data;
ddlClassName.DataBind();
}

确保控件设置为AutoPostBack=true,并且在第_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()));
    }
也许这会给你另一个想法。在我看来,这比你所拥有的要“简单”一点,也更容易理解,但正如我所说,在没有看到你的整个应用程序的情况下,我真的无法做出这样的判断:)

希望这有帮助