2013-09-24 83 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;并检索其价值。谢谢 –