ViewState для приватной строки с кнопкой - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть gridview с событием Rowcommand, которое позволяет мне получить столбец ActivityID значение ячейки и поместить его в private string с именем ActivityIDString .

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», строка ActivityIDS становится 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?????

    }   
}

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Вы можете использовать сессию здесь.Всякий раз, когда выбирается строка, добавьте идентификатор в сеанс и получите значение объекта сеанса в событии щелчка 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;
}
0 голосов
/ 24 сентября 2018

этот метод должен быть примерно таким:

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();
        }        
}
...