Привязать данные и вернуть значение для выпадающего списка - PullRequest
1 голос
/ 18 ноября 2011

Я очень новичок в asp.net и c # Я хотел бы получить некоторую помощь с выпадающим списком.Я хочу вернуть значение ClassName для конкретного учащегося из таблицы «Студенты» в раскрывающемся списке.Я также хочу, чтобы в раскрывающемся списке были указаны все имена классов из таблицы StudentClasses.Но мой код возвращает все значения из выпадающего списка.

Может кто-нибудь сказать мне, что я сделал неправильно?

У меня есть таблица с именем StudentClasses со следующими данными, например:

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

У меня есть еще одна таблица, которая называется «Студенты», где ClassID из StudentClasses является внешним ключом, например:

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

Я хочу вернуться на страницу просмотра следующего:

Class будет раскрывающимся списком всех className из StudentClasses и покажет класс Джона Смита, 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 Ответ

2 голосов
/ 18 ноября 2011

Убедитесь, что для вашего элемента управления установлено значение 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()));
    }

Возможно, это даст вам альтернативную идею.На мой взгляд, это немного «проще» и легче понять, чем то, что у вас есть, но, как я уже сказал, не видя всего вашего приложения, я не могу на самом деле принять такое решение:)

Надеюсь, это поможет.

...