我已经删除了所选的数据网格,但在调试之后,我点击删除,但没有更新。抱歉我的英语不好。
这是我的剧本:
//Delete data buku private void DeleteDataBuku()
{
String con = (@"Data Source=FAJRI-PC\SQLEXPRESS;Initial Catalog=dbPerpustakaan;Integrated Security=True");
for (int i = 0; i < dvgPerpustakaan.Rows.Count; i++)
{
DataGridViewRow dr = dvgPerpustakaan.Rows[i];
if (dr.Selected == true)
{
dvgPerpustakaan.Rows.RemoveAt(i);
try
{
SqlConnection db = new SqlConnection(con);
db.Open();
SqlCommand dbcmd = db.CreateCommand();
string sql = "delete from Perpustakaan where KodeBuku=" + i;
dbcmd.CommandText = sql;
SqlDataAdapter sqlAdapter = new SqlDataAdapter(sql, con);
DataSet myDataset = new DataSet();
SqlAdapter.Fill(myDataset);
db.Close();
}
catch(Exception ex)
{
MessageBox.Show("Error");
}
}
}
}
答案 0 :(得分:1)
要在基础数据库中进行更改,您需要执行命令(在您的情况下是Delete命令)。在这种情况下,SqlDataAdapter的整套指令都没用。
for (int i = dvgPerpustakaan.Rows.Count - 1; i >= 0 ; i--)
{
DataGridViewRow dr = dvgPerpustakaan.Rows[i];
if (dr.Selected == true)
{
dvgPerpustakaan.Rows.RemoveAt(i);
try
{
using(SqlConnection db = new SqlConnection(con))
using(SqlCommand dbcmd = db.CreateCommand())
{
db.Open();
dbcmd.CommandText = "delete from Perpustakaan where KodeBuku=" + i;
dbcmd.ExecuteNonQuery();
}
}
catch(Exception ex)
{
MessageBox.Show("Error");
}
}
}
另外,为了避免循环索引出现问题,您应该从最后一行向后退到第一行,因为RemoveAt将更改网格中的总行数,并使用该值退出循环。
答案 1 :(得分:0)
删除字符串的结尾时遇到了类似的问题,我正在这样做
blahblahblah.remove(6,5):
当我重复使用blahblahblah
我通过以下方式解决了这个问题:
blahblahblah=blahblahblah.remove(6,5):
我相信您遇到了同样的问题,您要从数据网格中删除该行但不重新分配数据网格,请尝试:
dvgPerpustakaan=dvgPerpustakaan.Rows.RemoveAt(i);