用c#从数据库中删除datagrid中选定的行
本文关键字:datagrid 删除 数据库 | 更新日期: 2023-09-27 17:50:00
如何从数据表中删除网格中选择的特定行。我试过用这个代码。
string s1 = null;
int i = datagridInfoOrg.CurrentCell.RowIndex;
datagridInfoOrg.Rows.RemoveAt(i);
datagridInfoOrg.Refresh();
string s = "Select * from Add_Information";
SqlCommand cmd1 = new SqlCommand(s, con);
SqlDataReader dr = cmd1.ExecuteReader();
if (dr.Read())
{
s1 = dr[i].ToString();
}
cmd1.Dispose();
dr.Dispose();
string Query = "delete from Add_Information WHERE CompanyName='"+s1+"'";
SqlCommand cmd = new SqlCommand(Query, con);
//conDatabase.Open();
if (cmd.ExecuteNonQuery() >= 1)
{
MessageBox.Show("Succesfully Updated !!");
}
else
{
MessageBox.Show("No row selected");
}
只删除第一行,而不删除选中的行。有人能帮我一下吗?
您的行s1 = dr[i].ToString();
将始终为您提供第一行的第i列,因为您只执行了第一个dr.Read()
看来你的逻辑是错的。
SqlDataReader.Read()
方法逐行读取读取器。这意味着当您在if语句中编写dr[i].ToString()
时(不像while语句),此代码只工作一次,并读取第一行的第i个数字单元格。这就是为什么删除第一行是很正常的。
但是由于我们不知道代码中i
的值是多少,所以不可能假设更多
我将采用一种稍微不同的方法从选中的行获取单元格数据,如下所示。这里的想法不是通过索引来获取单元格值并在删除查询中使用该值,因此来自单元格的值将用于获取DataTable中的行,或者直接到数据库中的表中并删除与DataGridView中找到的公司名称匹配的一行或多行。
/// <summary>
/// In the case there is a column in the DataGridView
/// named CompanyNameColumn
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void cmdRemoveDataGridViewRow_Click(object sender, EventArgs e)
{
// make sure we have a row to work with
if (!datagridInfoOrg.CurrentRow.IsNewRow)
{
// use this value for your query
string KeyValue = datagridInfoOrg
.CurrentRow
.Cells["CompanyNameColumn"]
.Value
.ToString();
if (!string.IsNullOrWhiteSpace(KeyValue))
{
// row index for current row
// int rowIndex = datagridInfoOrg.CurrentCell.RowIndex;
// do your delete and would suggest using a parameterized
// query especially if there is a chance of embedded apostrophe
// in the cell value
datagridInfoOrg.Rows.Remove(datagridInfoOrg.CurrentRow);
}
else
{
// recovery code in the event the value in the cell
// was not valid.
}
}
}