【问题标题】:ViewState for private string with button带有按钮的私有字符串的 ViewState
【发布时间】:2019-02-23 08:36:01
【问题描述】:

我有一个带有Rowcommand 事件的gridview,让我获取列ActivityID 单元格值 并将其放入名为ActivityIDString 的private string强>。

private string ActivityIDString; // To be used in btUpdate   

    protected void gwActivity_RowCommand(object sender, GridViewCommandEventArgs e)
    {

        if (e.CommandName == "Page") return;

        GridViewRow row = ((e.CommandSource as Control).NamingContainer as GridViewRow);

        string ActivityID = row.Cells[1].Text;
        ActivityIDString = ActivityID;
    }

这一切都在选择行时,但是当我按“BTUPDATE”按钮时,ActivityIdstring将变为NULL。

protected void btUpdate_Click(object sender, EventArgs e)
    {

            string CS = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
            using (SqlConnection con = new SqlConnection(CS))
            {
                SqlCommand cmd = new SqlCommand("sp_tblActivityUpdate", con);
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@ActivityID", ActivityIDString);
                con.Open();
                cmd.ExecuteNonQuery();
                BindGridviewActivity();
            }        
    }

我了解该问题以及它为何变为 NULL,但我不知道如何解决此问题以及在何处使用 ViewState。

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

        ViewState["ActivityIDStringText"] = "ActivityIDString"; //  <-- SHOULD I CREATE THIS?????

    }   
}

【问题讨论】:

  • 你把你的按钮绑定到gridview里面了吗?
  • 不,按钮在gridview之外
  • 好的,那么您可以在您的方法中使用 viewState 请查看答案。

标签: asp.net string button viewstate rowcommand


【解决方案1】:

这个方法应该是这样的

protected void gwActivity_RowCommand(object sender, GridViewCommandEventArgs e)
{

    if (e.CommandName == "Page") return;
    GridViewRow row = ((e.CommandSource as Control).NamingContainer as GridViewRow);

    string ActivityID = row.Cells[1].Text;
    ViewState["ActivityIDString"] = ActivityID;
}

然后在按钮方法中检索它

protected void btUpdate_Click(object sender, EventArgs e)
{

        string CS = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
        string ActivityIDString= Convert.ToString(ViewState["ActivityIDString"]);
        using (SqlConnection con = new SqlConnection(CS))
        {
            SqlCommand cmd = new SqlCommand("sp_tblActivityUpdate", con);
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@ActivityID", ActivityIDString);
            con.Open();
            cmd.ExecuteNonQuery();
            BindGridviewActivity();
        }        
}

【讨论】:

  • 谢谢你这是完美的,它的工作原理。这只是将 ViewState 放在哪里的问题:)
【解决方案2】:

您可以在此处使用会话。如果选择了一行时,请在会话中添加ID,并在BTUpdate单击事件中检索会话对象的值,然后在“会话”中。

gwActivity_RowCommand() 内部

Session["ActivityId"] += ";ActivityId";

在 btUpdate_Click() 内部

if(Session["ActivityId"]!=null){
    var ActivityIds = Session["ActivityId"].Split(';');  // For Mulitple Ids if Required
    Session["ActivityId"] = null;
}

【讨论】:

    猜你喜欢
    • 2017-03-09
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多