什么都不会删除选中的行

时间:2013-07-14 00:19:22

标签: c# visual-studio-2010 sql-server-2008

我已经删除了所选的数据网格,但在调试之后,我点击删除,但没有更新。抱歉我的英语不好。

这是我的剧本:

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

        }
    }
 }

2 个答案:

答案 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

时,会删除位置6中的5个字符并且不会删除任何内容

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

blahblahblah=blahblahblah.remove(6,5):

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

dvgPerpustakaan=dvgPerpustakaan.Rows.RemoveAt(i);
相关问题