如何从数据表中删除在网格中选择的特定行。 我试过这段代码。
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");
}
通过此代码只删除第一行,但不删除所选行。 任何人都可以帮助我吗?
答案 0 :(得分:1)
您的第s1 = dr[i].ToString();
行始终会为您提供第一行的第i列,因为您只执行了第一行dr.Read()
答案 1 :(得分:0)
好像你的逻辑错了。
SqlDataReader.Read()
方法逐行读取您的读者。这意味着当您在 if语句(而不是像 while语句)中编写dr[i].ToString()
时,此代码只运行一次并读取 i-th 第一行的数字 。这就是为什么删除第一行太正常了。
但是,由于我们不知道代码中i
的价值是什么,因此无法假设更多。
答案 2 :(得分:0)
我会采用稍微不同的方法从所选行获取单元格数据,如下所示。这里的想法不是通过索引来获取单元格值并在删除查询中使用该值,因此单元格中的值将用于获取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.
}
}
}