2015-12-13 2 views
0

Я работал над этим некоторое время, но, похоже, я не могу понять это. Поэтому у меня есть раскрывающийся список, называемый ddStudent, где значение textField из таблицы sql, которую я сделал, называется «Студент» из столбца с именем «firstName». Теперь я использовал «studentID» в качестве поля значений.Идентификатор магазина из ниспадающего списка

Вот где у меня проблема. Я хочу выполнить мою хранимую процедуру, которая принимает studentID как параметр, но я не понимаю, как сохранить фактический идентификатор студента в параметре.

Вот что я так далеко

protected void btnRegister_Click(object sender, EventArgs e) 
    { 
     int selValClass = Convert.ToInt32(ddClassNames.SelectedValue); 
     int selValStudent = Convert.ToInt32(ddStudents.SelectedValue); 

     using (SqlConnection con = new SqlConnection(CS)) 
     { 
      SqlCommand cmd = new SqlCommand("procRegStudent", con); 
      cmd.CommandType = CommandType.StoredProcedure; 

      cmd.Parameters.AddWithValue("@studentID", selValStudent); 
      cmd.Parameters.AddWithValue("@classID", selValClass); 

      con.Open(); 
      cmd.ExecuteNonQuery(); 
      con.Close(); 

     } 

и вот мой код databinding-

using (SqlConnection con = new SqlConnection(CS)) 
     { 
      SqlCommand cmd = new SqlCommand("SELECT studentID, firstName, lastName, ssn, address, city, state, zip FROM Student ", con); 

      con.Open(); 

      ddStudents.DataSource = cmd.ExecuteReader(); 
      ddStudents.DataTextField = "firstName"; 
      ddStudents.DataValueField = "studentID"; 
      ddStudents.DataBind(); 

     } 

Теперь мой вопрос, есть ли способ я могу хранить фактический studentID от выпадающий список, когда я его выберу? По какой-то причине, когда я это делаю, страница перезагружает и выбирает первый идентификатор студента, который я не выбрал. Я не совсем уверен, что происходит.

Спасибо.

Edit-

Я хотел убедиться, что я clarify-

У меня 3 студентов в моем студенческом выпадающем списке. Когда я выбираю ученика 3 (с учеником ID 3), первый ученик в выпадающем списке передается как параметр, и я не могу сказать почему.

+0

Не могли бы вы, пожалуйста, пришлите мне вид дизайна для ddStudent DropDownList, я хочу кое-что проверить, прежде чем сказать мой ответ :)! – FreedomDeveloper

+0

@FreedomDeveloper Вы имеете в виду таблицу, связанную с ней? Не –

+0

Нет, я имею в виду вид HTML вашего DropDownList управления который является чем-то вроде этого: <жерех: DropDownList ID = Runat = "сервер" "DropDownList1"> FreedomDeveloper

ответ

1

Эта проблема логична для элемента управления Dropdownlist, потому что ваш dropdownlist пропустил, чтобы иметь рендеринг по умолчанию, когда он возвращается с сервера. Душа очень проста, вы должны добавить элемент списка по умолчанию, который будет значением по умолчанию при загрузке страницы

Здесь я сделал простой пример, как мы можем решить эту проблему:

в Page.aspx:

<asp:DropDownList ID="ddStudents" runat="server" DataTextField = "firstName" DataValueField = "studentID" AppendDataBoundItems="true"> 
     <asp:ListItem Text="===Select Student===" Value="0"></asp:ListItem> 

    </asp:DropDownList> 

    <asp:Button ID="btnRegister" runat="server" Text="Register" OnClick="btnRegister_Click" /> 
    <asp:Label ID="lblMessage" runat="server" Text="Label"></asp:Label> 

в Page.aspx.cs:

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      BindDropDown(); 

     } 

    } 

    private void BindDropDown() 
    { 
     DataTable dt = new DataTable(); 
     dt.Columns.Add("studentID", typeof(int)); 
     dt.Columns.Add("firstName", typeof(string)); 

     dt.Rows.Add(dt.NewRow()); 
     dt.Rows[0]["studentID"] = 1; 
     dt.Rows[0]["firstName"] = "Markus"; 


     dt.Rows.Add(dt.NewRow()); 
     dt.Rows[1]["studentID"] = 2; 
     dt.Rows[1]["firstName"] = "Arthur"; 


     ddStudents.DataSource = dt; 
     ddStudents.DataBind(); 
    } 

    protected void btnRegister_Click(object sender, EventArgs e) 
    { 
     if (ddStudents.SelectedIndex > 0) 
     { 
      lblMessage.Text = String.Format("You selected {0} with Number : {1}", ddStudents.SelectedItem.Text,ddStudents.SelectedValue); 
     } 
    } 

Подсказка: Я ознаменовало DropDownList AppendDataBoundItems собственности истина только, чтобы сказать DropDownList включить ListItem по умолчанию, когда данные переплетены ..

Надеюсь, мой код поможет вам решить вашу проблему :)

0

Попробуйте с этим

int selValStudent = int.Parse (this.ddStudents.SelectedValue);

и поставить

BindDropDown();

в свой постбэка

Смежные вопросы