2011-11-18 53 views
1

我对asp.net和c#非常陌生,我希望得到一些关于dropdownlist的帮助。我想从下拉列表中的学生表中返回特定学生的ClassName值。我还希望下拉列表中填入StudentClasses表中的所有ClassNames。但是我的代码不会返回下拉列表中的任何值。为下拉列表绑定数据和返回值

有人能告诉我我做错了什么吗?

我有一个名为StudentClasses数据如下表,例如:

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

我有另一个表名为学生,其中来自StudentClasses添加一个类是外键,如:

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

我想在我的页面视图返回如下:

类将是一个下拉从StudentClasses所有的className的列表,显示约翰·史密斯的类,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(); 
} 

回答

2

确保您的控制设置的AutoPostBack =真实的,对的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())); 
    } 

也许会给你一个替代的想法。在我看来,这有点“更简单”,比你拥有的更容易理解,但就像我说过的,没有看到你的整个应用程序,我不能做出判断:)

希望这会有所帮助。