2014-01-21 174 views
0

在GridView的刪除按鈕,這是我的代碼:問題在Visual Studio

private void Bind() 
     { 
      SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\Dido\documents\visual studio 2012\Projects\CourseProjectCars\CourseProjectCars\DataCars.mdf;Integrated Security=True;Connect Timeout=30"); 
      con.Open(); 
      SqlDataAdapter da = new SqlDataAdapter("select * from SuperCars", con); 
      DataTable dt = new DataTable(); 
      da.Fill(dt); 
      dataGridView1.DataSource = dt; 
      con.Close(); 
     } 





private void button4_Click(object sender, EventArgs e) 
{ 
    SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\Dido\documents\visual studio 2012\Projects\CourseProjectCars\CourseProjectCars\DataCars.mdf;Integrated Security=True;Connect Timeout=30"); 
    SqlCommand delcmd = new SqlCommand(); 
    if (dataGridView1.Rows.Count > 1 && dataGridView1.SelectedRows[0].Index != dataGridView1.Rows.Count - 1) 
    { 
     delcmd.CommandText = "DELETE FROM SuperCars WHERE Car='%" + dataGridView1.SelectedRows[0].Cells[0].Value.ToString() + "%'"; 
     con.Open(); 
     delcmd.Connection = con; 
     delcmd.ExecuteNonQuery(); 
     con.Close(); 
     dataGridView1.Rows.RemoveAt(dataGridView1.SelectedRows[0].Index); 
     MessageBox.Show("Row Deleted"); 
    } 
    Bind(); 
} 

我想提出一個刪除按鈕在我的應用程序。當我選擇一行並單擊刪除按鈕時,它會拋出以下異常:

索引超出範圍。必須是非負數且小於集合的大小。

回答

0

顯示側綁定()函數的代碼。我認爲記錄不會在數據庫中被刪除,當你在那時調用Bind()函數時,再次在gridview中綁定記錄。 我覺得你刪除查詢是錯誤的,如果你想刪除其擁有汽車作爲細胞[0]值記錄,以便查詢將如下所示:

delcmd.CommandText = "DELETE FROM SuperCars WHERE Car Like '%" +dataGridView1.SelectedRows[0].Cells[0].Value.ToString() + "%'"; 
+0

我粘貼在上面。請看一下。 – Cathy

+0

是的,我覺得當你點擊刪除的時候GridView行沒有被選中,那是有機會得到錯誤的。 –

+0

謝謝,這有助於更多! – Cathy

1

問題是你不知道如何選擇行還有DataGridView如何理解當行稱爲選擇。要選擇一行,您必須單擊行標題,或者如果您想通過單擊該行上的任何單元格來選擇行,只需將屬性SelectionMode設置爲DataGridViewSelectionMode.FullRowSelect即可。那麼SelectedRows應該至少有1個項目,索引超出範圍的異常不應該再被拋出。

如果您打算讓用戶可以一次刪除1行,我想你可以使用屬性CurrentRow來獲取當前選定行,你也可以使用CurrentCellCurrentCellAddress,並從中獲得所選行。

+0

這解決了例外的問題,但它仍然dosn't從數據庫中刪除條目... – Cathy

+0

謝謝,幫助很多! – Cathy