2013-09-24 6 views
0

У меня есть Dropdownlist и кнопка внутри datalist. Я выбираю количество элементов из раскрывающегося списка, а затем передаю его в событие кнопки, чтобы отправить его в базу данных.Как передать значения между событиями?

Но я не могу этого сделать. Проблема в том, что переменная selectedValue присваивается только внутри dditem_change, хотя я объявил ее глобально.

Как получить доступ к его значению в DataList1_ItemCommand(object source, DataListCommandEventArgs e).

Вот код для изменения выпадающего списка

public void dditem_change(object sender, EventArgs e) 
    { 
     var ddlList = (DropDownList)sender; 
     selectedValue = ((DropDownList)ddlList.NamingContainer.FindControl("drplist")).SelectedValue; 
    } 

Это код для общественного ничтожной DataList1_ItemCommand

public void DataList1_ItemCommand(object source, DataListCommandEventArgs e) 
{ 
    if(e.CommandName == "Add") 
    { 
     if (Session["user"] == null) 
     { 
      Response.Write("<script>alert('Login First!!!');</script>"); 

     } 
     else 
     { 

      string[] ar = e.CommandArgument.ToString().Split(','); 
      SqlConnection con = new SqlConnection(); 
      con.ConnectionString = "Data Source=DTPXP-77A;Initial Catalog=practice;Integrated Security=true"; 
      con.Open(); 
      SqlCommand cmd = new SqlCommand("insert into cart values(@username,@prodname,@price,@stock)", con); 
      cmd.Parameters.Add("@username", SqlDbType.VarChar); 
      cmd.Parameters.Add("@prodname", SqlDbType.VarChar); 
      cmd.Parameters.Add("@price", SqlDbType.Int); 
      cmd.Parameters.Add("@stock", SqlDbType.Int); 
      cmd.Parameters["@username"].Value = Session["user"].ToString(); 
      cmd.Parameters["@prodname"].Value = ar[0].ToString(); 
      cmd.Parameters["@price"].Value = int.Parse(ar[1]); 
      cmd.Parameters["@stock"].Value = //selectedValue NOT ACCESSIBLE// 
      cmd.ExecuteNonQuery(); 
      Response.Write("<script>alert('Successfully Added');</script>"); 

     } 
    } 
}  
+1

Можете ли вы использовать ddlList.SelectedValue внутри DataList1_ItemCommand? – appcoder

+1

Не могли бы вы показать, как это объявлено и где в контексте класса страницы? – Steve

+0

Нет, я не могу получить доступ к ddlList.SelectedValue внутри DataList1_ItemCommand –

ответ

-1

Почему вы не читали значение непосредственно там, где вам это нужно? В этом случае вам не нужно ничего хранить в переменной «selectedValue». Что-то вроде:

cmd.Parameters["@stock"].Value = 
    ((DropDownList)FindControl("drpList")).SelectedValue; 

EDIT: Я добавил бросок в DropDownList.

0

Это результат ASP.NET page lifecycle. Когда вы выбираете раскрывающееся меню, это вызывает обратную передачу, в которой вы храните переменную selectedValue. Когда вы затем запускаете кнопку, которая вызывает еще один postback, который приводит к тому, что ваш selectedValue теряется при восстановлении страницы.

Чтобы сохранить значение между postbacks, вам необходимо его где-то сохранить. Например, вы можете использовать хранилище Session, например.

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     selectedValue = (string)Session["SelectedValue"]; 
    } 
} 

public void dditem_change(object sender, EventArgs e) 
{ 
    var ddlList = (DropDownList)sender; 
    Session["SelectedValue"] = ((DropDownList)ddlList.NamingContainer.FindControl("drplist")).SelectedValue; 
} 

public void DataList1_ItemCommand(object source, DataListCommandEventArgs e) 
{ 
    // selectedValue should now be accessible 
} 

Учитывая, как мало данные, а также учитывая, что в самом деле-вид конкретно, это может быть лучше поместить в ViewState.

+0

Вы были правы Я сделал сеанс ["value"] = selectedValue; и получил его значение. благодаря –

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