2016-03-20 94 views
-1

删除stockdataGridView1的选定行后,它不刷新。请在删除所选行后告诉我如何刷新。我是否需要重新打开表单或添加另一个按钮进行刷新?如何刷新DataGridView后删除行格式DataGridView和数据库在C#中?

private void stockdataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) 
{ 

} 

private void Report_Load(object sender, EventArgs e) 
{ 
    string connectionString = @"Server=.\SQLEXPRESS; Database = stock; integrated Security = true"; 
    SqlConnection connection = new SqlConnection(connectionString); 
    string query = "SELECT * FROM stocktable1"; 
    SqlCommand command = new SqlCommand(query, connection); 
    connection.Open(); 
    SqlDataReader reader = command.ExecuteReader(); 
    List<Stock> stocks = new List<Stock>(); 
    while (reader.Read()) 
    { 
     Stock stock = new Stock(); 
     stock.id = (int)reader["id"]; 
     stock.gsm = reader["gsm"].ToString(); 
     stock.color = reader["color"].ToString(); 
     stock.size = reader["size"].ToString(); 
     stock.yard = reader["yard"].ToString(); 
     stock.meter = reader["meter"].ToString(); 
     stock.quantity = reader["quantity"].ToString(); 
     stock.supplier = reader["supplier"].ToString(); 
     stock.purpose = reader["purpose"].ToString(); 
     stock.chalanno = reader["chalanno"].ToString(); 
     stocks.Add(stock); 
    } 
    reader.Close(); 
    connection.Close(); 
    stockdataGridView1.DataSource = stocks; 
} 

private void deletebutton_Click(object sender, EventArgs e) 
{ 

    int id = (int)stockdataGridView1.CurrentRow.Cells["id"].Value; 
    string connectionString = @"Server=.\SQLEXPRESS; Database = stock; integrated Security = true"; 
    SqlConnection connection = new SqlConnection(connectionString); 
    string query = "delete from stocktable1 where id=" + id; 
    SqlCommand command = new SqlCommand(query, connection); 
    connection.Open(); 
    int rowaffected = command.ExecuteNonQuery(); 
    connection.Close(); 
    stockdataGridView1.Update(); 
    stockdataGridView1.Refresh(); 

    MessageBox.Show("deleted"); 
} 

} }

enter image description here

+1

你需要给你打电话删除该行'Report_Load'后,如果这是你如何绑定在初始加载数据这个方法..怎么回事,你希望将DataGrid知道什么被删除了..? – MethodMan

+0

当我在删除 – anasbiswas

+1

之后调用这个函数时,Report_Load(object sender,EventArgs e)方法的参数应该更频繁地使用,你的代码中包含重复的静态语句调用这样的建立连接,包含函数内的那些语句和调用该功能为您节省了重写这些状态的麻烦! – Aboudi

回答

0

添加我在下面创建的新方法,并调整原始方法,如下所示,当您加载网格并删除它时应调用该方法。

正如我在我的评论中提到的,您的代码需要调整,使用函数更加简单。

 private void stockdataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) 
     { 

     } 

     private void UpdateAndLoad() 
     { 

      string connectionString = @"Server=.\SQLEXPRESS; Database = stock; integrated Security = true"; 
      SqlConnection connection = new SqlConnection(connectionString); 
      string query = "SELECT * FROM stocktable1"; 
      SqlCommand command = new SqlCommand(query, connection); 
      connection.Open(); 
      SqlDataReader reader = command.ExecuteReader(); 
      List<Stock> stocks = new List<Stock>(); 
      while (reader.Read()) 
      { 
       Stock stock = new Stock(); 
       stock.id = (int)reader["id"]; 
       stock.gsm = reader["gsm"].ToString(); 
       stock.color = reader["color"].ToString(); 
       stock.size = reader["size"].ToString(); 
       stock.yard = reader["yard"].ToString(); 
       stock.meter = reader["meter"].ToString(); 
       stock.quantity = reader["quantity"].ToString(); 
       stock.supplier = reader["supplier"].ToString(); 
       stock.purpose = reader["purpose"].ToString(); 
       stock.chalanno = reader["chalanno"].ToString(); 
       stocks.Add(stock); 
      } 
      reader.Close(); 
      connection.Close(); 
      stockdataGridView1.DataSource = stocks; 
     } 

     private void Report_Load(object sender, EventArgs e) 
     { 
      UpdateAndLoad(); 
     } 

     private void deletebutton_Click(object sender, EventArgs e) 
     { 

      int id = (int)stockdataGridView1.CurrentRow.Cells["id"].Value; 
      string connectionString = @"Server=.\SQLEXPRESS; Database = stock; integrated Security = true"; 
      SqlConnection connection = new SqlConnection(connectionString); 
      string query = "delete from stocktable1 where id=" + id; 
      SqlCommand command = new SqlCommand(query, connection); 
      connection.Open(); 
      int rowaffected = command.ExecuteNonQuery(); 
      connection.Close(); 
      stockdataGridView1.Update(); 
      stockdataGridView1.Refresh(); 

      MessageBox.Show("deleted"); 
      UpdateAndLoad(); 
     } 
+0

非常感谢你:) – anasbiswas

+0

@anasbiswas代码现在更新!不客气 :) – Aboudi

0

要刷新行添加或删除你需要重新设置网格的DataSource属性,然后调用DataGridView对象DataBind()方法后的网格。对于您的情况,您可以在类级别定义数据源,即您的List<Stock>对象,并捕获删除按钮的单击事件,如前所述将数据源重新绑定到数据网格视图。

相关问题