2012-05-18 2 views
0

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

Сначала пользователю предлагается выбрать даты, а затем нажать кнопку, чтобы отобразить данные 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 [email protected], [email protected] where [email protected] and [email protected] and [email protected]", 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; 




      } 

ответ

1

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

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

Здесь вы связывание сетки после обновления, но не назначая DataTable к GridView1. Источник данных. Вы можете вызвать метод 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; 

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

+0

За исключением того, что datatable dt в button1_click, в то время как обновление выполняется в button1_click – user1270384

+0

Создайте метод для загрузки и заполнения данных в сетке, например FillGrid(), и вызовите инструкцию после обновления, и где бы вы ни были d для заполнения сетки – Adil

+0

У вас есть пример, пожалуйста – user1270384

0

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

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; 
      } 



    } 

} защищен недействительным GridView1_RowUpdating (объект отправителя, GridViewUpdateEventArgs е) {

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 [email protected], [email protected] where [email protected] and [email protected] and [email protected]", 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(); 

}

+0

Спасибо @Kuldeep: Я пойду с ответом выше, поскольку я не использую обновление строк. – user1270384

Смежные вопросы