2013-09-24 136 views
0

我有一個Dropdownlist和一個數據列表中的按鈕。我從dropdownlist中選擇項目的數量,然後將其傳遞給按鈕事件以將其發送到數據庫。如何在事件之間傳遞值?

但我無法這樣做。問題是變量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

你可以在DataList1_ItemCommand中使用ddlList.SelectedValue嗎? – appcoder

+1

你能說明它是如何聲明的以及在頁面類的上下文中的位置嗎? – Steve

+0

不,我不能訪問ddllist.SelectedValue裏面DataList1_ItemCommand –

回答

-1

代碼爲什麼你不直接讀取值,你需要它嗎? 在這種情況下,您不需要在「selectedValue」變量中存儲任何內容。就像:

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

編輯:我添加了轉換DropDownList。

0

這是ASP.NET page lifecycle的結果。當您選擇下拉菜單時,這將導致一個回傳,其中存儲您的selectedValue變量。當你然後觸發導致另一個回發的按鈕,這將導致您的selectedValue在頁面重新創建時丟失。

爲了保留回傳之間的價值,你需要將它存儲在某個地方。例如,您可以使用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

你是對的我做了一個Session [「value」] = selectedValue;並檢索其價值。謝謝 –