Gridview для отображения после обновления

Я использую массовое обновление для обновления сетки.

Сначала пользователю предлагается выбрать даты, а затем нажать кнопку, чтобы отобразить данные сетки для этих дат. Обновите соответствующие ячейки и нажмите «Сохранить».

Дело в том, что мой Gridview исчезает после обновления. Я хочу, чтобы Gridview продолжал отображать обновленные данные. Как мне это сделать?

Фрагменты кода:

 string connStr = ConfigurationManager.ConnectionStrings["bbsConnectionString"].ConnectionString;
        using (SqlConnection Con = new SqlConnection(connStr))
        {

            SqlDataAdapter sdr = new SqlDataAdapter(str, Con);

            sdr.SelectCommand.Parameters.AddWithValue("@startdate", startdate);
            sdr.SelectCommand.Parameters.AddWithValue("@enddate", enddate);
            DataTable dt = new DataTable();
            sdr.Fill(dt);
            if (dt.Rows.Count > 0)
            {
                GridView1.DataSource = dt;
                GridView1.DataBind();
                Button2.Visible = true;
            }



        }

    protected void Button2_Click(object sender, EventArgs e)
    {
        foreach (GridViewRow row in GridView1.Rows)
        {



            TextBox dtm = row.FindControl("DtmTextBox") as TextBox;


            string connStr = ConfigurationManager.ConnectionStrings["bbsConnectionString"].ConnectionString;
            using (SqlConnection Con = new SqlConnection(connStr))
            {
                Con.Open();
                SqlCommand cmd = new SqlCommand("Update tblAvailable set intqty=@intQty, curprice=@curprice where intresortid=@intresortid and dtm=@dtm and strroomtype=@strroomtype", Con);



                // cmd.Parameters.AddWithValue("@dtm", DateTime.ParseExact(dtm.Text.Trim(), "dd/M/yyyy", System.Globalization.CultureInfo.InvariantCulture));

                cmd.ExecuteNonQuery();
                GridView1.EditIndex = -1;
                GridView1.DataBind();
                GridView1.Visible = true;




            }

person user1270384    schedule 18.05.2012    source источник


Ответы (2)


Вы должны назначить datatable/DataSet источнику данных до вызова метода привязки

 GridView1.DataSource = dt;
 GridView1.DataBind();

Здесь вы привязываете сетку после обновления, но не назначаете DataTable для GridView1.DataSource. Вы можете вызвать здесь метод DataGrid вместо такой привязки.

private void FillGrid()
{
string connStr = ConfigurationManager.ConnectionStrings["bbsConnectionString"].ConnectionString;
        using (SqlConnection Con = new SqlConnection(connStr))
        {

            SqlDataAdapter sdr = new SqlDataAdapter(str, Con);

            sdr.SelectCommand.Parameters.AddWithValue("@startdate", startdate);
            sdr.SelectCommand.Parameters.AddWithValue("@enddate", enddate);
            DataTable dt = new DataTable();
            sdr.Fill(dt);
            if (dt.Rows.Count > 0)
            {
                GridView1.DataSource = dt;
                GridView1.DataBind();
                Button2.Visible = true;
            }
        }
}
 //You should as call the method FillGrid that loads data and bind grid previously      

            cmd.ExecuteNonQuery();
            GridView1.EditIndex = -1;
            //GridView1.DataBind();
            FillGrid();
            GridView1.Visible = true;

Удалите этот оператор и вызовите метод, который ранее связывал сетку.

person Adil    schedule 18.05.2012
comment
За исключением этого datatable dt в button1_click, пока выполняется обновление в button1_click - person user1270384; 18.05.2012
comment
Создайте метод для загрузки и заполнения данных в сетке, например FillGrid(), и вызовите после оператора обновления и везде, где вам нужно заполнить сетку. - person Adil; 18.05.2012
comment
У вас есть пример, пожалуйста - person user1270384; 18.05.2012
comment
Я обновил свой ответ, надеюсь, он поможет вам загрузить данные. - person Adil; 18.05.2012

Я уже использовал код ниже. Я буду работать. Вы должны снова вызвать тот метод, в котором вы отображаете представление сетки по дате.

public void DisplyGridview(){

string connStr = ConfigurationManager.ConnectionStrings["bbsConnectionString"].ConnectionString;
    using (SqlConnection Con = new SqlConnection(connStr))
    {

        SqlDataAdapter sdr = new SqlDataAdapter(str, Con);

        sdr.SelectCommand.Parameters.AddWithValue("@startdate", startdate);
        sdr.SelectCommand.Parameters.AddWithValue("@enddate", enddate);
        DataTable dt = new DataTable();
        sdr.Fill(dt);
        if (dt.Rows.Count > 0)
        {
            GridView1.DataSource = dt;
            GridView1.DataBind();
            Button2.Visible = true;
          }



    }

} protected void GridView1_RowUpdating (отправитель объекта, GridViewUpdateEventArgs e) {

    foreach (GridViewRow row in GridView1.Rows)
    {



        TextBox dtm = row.FindControl("DtmTextBox") as TextBox;


        string connStr = ConfigurationManager.ConnectionStrings["bbsConnectionString"].ConnectionString;
        using (SqlConnection Con = new SqlConnection(connStr))
        {
            Con.Open();
            SqlCommand cmd = new SqlCommand("Update tblAvailable set intqty=@intQty, curprice=@curprice where intresortid=@intresortid and dtm=@dtm and strroomtype=@strroomtype", Con);



            // cmd.Parameters.AddWithValue("@dtm", DateTime.ParseExact(dtm.Text.Trim(), "dd/M/yyyy", System.Globalization.CultureInfo.InvariantCulture));

            cmd.ExecuteNonQuery();
            GridView1.EditIndex = -1;
            GridView1.DataBind();
            GridView1.Visible = true;




        }

DisplyGridview();

}

person kuldeep verma    schedule 18.05.2012
comment
Спасибо @Kuldeep: я воспользуюсь ответом выше, так как не использую обновление строк. - person user1270384; 18.05.2012