2011-11-18 55 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())); 
    } 

也許會給你一個替代的想法。在我看來,這有點「更簡單」,比你擁有的更容易理解,但就像我說過的,沒有看到你的整個應用程序,我不能做出判斷:)

希望這會有所幫助。