[英]How to delete selected row from datagridview in C# and also delete that record from database?
大家好,我想通過在C#Windows窗體的datagridview中選擇一行來刪除一行,但是我也希望該記錄也應該從數據庫中刪除。我嘗試了以下代碼,但它不起作用。請幫忙解決此問題問題。
碼:
using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["CS"].ConnectionString))
{
SqlCommand delcmd = new SqlCommand();
foreach (DataGridViewRow row in dg.Rows)
{
if (row.Selected)
{
dg.Rows.RemoveAt(row.Index);
try
{
delcmd.CommandText = "Delete From ITEM_DETAILS Where ITEM_MODEL=" + row + "";
con.Open();
delcmd.Connection = con;
delcmd.ExecuteNonQuery();
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
}
}
您應該為ITEM_MODEL傳遞一個值,以將其從行中提取出來。
您不能為此使用整行。 並且在任何情況下都應使用參數化查詢。
假設您的網格在名為“ ITEM_MODEL”的列中顯示了ITEM_MODEL的值
try
{
delcmd.CommandText = "Delete From ITEM_DETAILS Where ITEM_MODEL=@item";
con.Open();
delcmd.Connection = con;
delcmd.Parameters.AddWithValue("@item", row.Cells["ITEM_MODEL"].Value.ToString());
delcmd.ExecuteNonQuery();
}
請注意,我不知道數據庫表中ITEM_MODEL列的數據類型。 我假設它是一個字符串,所以創建了字符串類型的參數。 如果此假設不成立,則應使用網格列中存儲的值進行適當的轉換來創建參數
我還建議更改網格行上的循環。 您正在從Rows集合中刪除項目,並且不能通過foreach安全地使用row.Index值。 最好使用傳統的循環從末尾移到第一行
for(int x = dg.Rows.Count - 1; x >= 0; x--)
{
DataGridRow row = dg.Rows[x];
if (row.Selected)
{
dg.Rows.RemoveAt(row.Index);
.....
您的SQL字符串可能是錯誤的。 我假設您不想為row.ToString()
調用row.ToString()
,其中row is DataGridViewRow
。
如果要與之比較的ITEM_MODEL位於該行的Tag
,則可以使用row.Tag
而不是row
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.