0

我已经删除了选定的数据网格,但是在调试之后,我点击了删除,但没有任何更新。*对不起我糟糕的英语。

这是我的脚本:

//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");
            }

        }
    }
 }
4

2 回答 2

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 将更改网格中的总行数,并且您使用该值退出循环。

于 2013-07-14T00:46:05.983 回答
0

删除字符串的结尾时我遇到了类似的问题,我正在这样做

blahblahblah.remove(6,5):

从位置 6 中删除了 5 个字符,当我重用时发现没有任何内容被删除blahblahblah

我通过以下方式解决了这个问题:

blahblahblah=blahblahblah.remove(6,5):

我相信您遇到了同样的问题,您正在从数据网格中删除该行,但没有重新分配您的数据网格,因此请尝试:

dvgPerpustakaan=dvgPerpustakaan.Rows.RemoveAt(i);
于 2013-07-16T14:01:09.637 回答