首页蓝耳朵|小小蓝耳朵广州图书馆外文室英语儿童读物资源介绍网佛教青年之友旧版收集永硕E盘Phonics Short Vowels Game 
DataGridView删除数据
所属栏目:winform  时间:2013-07-18 13:19  作者:狼子

DataGridView可以多选后点一个Button进行批量删除,也可以选中一行按键盘上的delete键删除一行

下面是按delete键删除一行的代码

private void dataGridView1_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)
        {
            DialogResult comfirmResult = MessageBox.Show(this, "确实要删除选中的记录吗?", "确认",
                MessageBoxButtons.YesNo,
                MessageBoxIcon.Question,
                MessageBoxDefaultButton.Button1,
                MessageBoxOptions.RightAlign);
            if (!comfirmResult.Equals(DialogResult.Yes)) e.Cancel = true;
        }
 
        private void dataGridView1_UserDeletedRow(object sender, DataGridViewRowEventArgs e)
        {
            this.cardModesTableAdapter.Update(this.saleDataSet.CardModes);
        }

蓝色那一段,是在DataGridView里新建数据源时生成的DataSet,连接这个数据源,自动会生成对应的TableAdapter,CardModes是我的表名,一般自动生成的DataSet只有Fill方法,即select语句,打开DataSet后,可以给对应的表添加查询,update、delete、insert都可以自动添加,删除添加的查询是:DELETE FROM [dbo].[CardModes] WHERE [CardModeID] = @Original_CardModeID;

下面是批量删除的方法,有两种方法

1.取选中行在DataGridView里的行号,删除数据源里对应行号的行,这个方法我还不知道运行机制是怎么样的,不知道具体到里面是怎么删除的,如果是删除对应行,有可能会因为多人同时操作而删除错误的数据,不过我还没有时间去查删除的原理,所以不能说这种方法有什么不好

DialogResult comfirmResult = MessageBox.Show(this, "确实要删除选中的记录吗?", "确认",
                MessageBoxButtons.YesNo,
                MessageBoxIcon.Question,
                MessageBoxDefaultButton.Button1,
                MessageBoxOptions.RightAlign);
            if (comfirmResult.Equals(DialogResult.Yes))
            {
                //要删除的总行数
                int rowsCount = dataGridView1.SelectedRows.Count;
                //取每一个选中行的行号
                int index;
                int[] rowsIndex = new int[rowsCount];
                for (index = 0; index < rowsCount; index++)
                {
                    rowsIndex[index] = dataGridView1.SelectedRows[index].Index;
                }
                //删除取出来的行号
                index = 0;
                while (index < rowsCount)
                {
                    this.saleDataSet.CardModes.Rows[rowsIndex[index]].Delete();
                    index++;
                }
                //保存到数据库
                this.cardModesTableAdapter.Update(this.saleDataSet.CardModes);
            }

2.从选中行中取出关键字段值,逐行删除,我用到的表名是CardModes,关键字段名是CardModeID

DialogResult comfirmResult = MessageBox.Show(this, "确实要删除选中的记录吗?", "确认",
                MessageBoxButtons.YesNo,
                MessageBoxIcon.Question,
                MessageBoxDefaultButton.Button1,
                MessageBoxOptions.RightAlign);
            if (!comfirmResult.Equals(DialogResult.Yes)) return;
            //要删除的总行数
            int rowsCount = dataGridView1.SelectedRows.Count;
            //删除
            for (int index = 0; index < rowsCount; index++)
            {
                int nowRowIndex = dataGridView1.SelectedRows[index].Index;
                int nowCardModeID = Convert.ToInt32(this.saleDataSet.CardModes.Rows[nowRowIndex]["CardModeID"]);
                this.cardModesTableAdapter.DeleteQuery(nowCardModeID);
            }
            //重新填充数据
            this.cardModesTableAdapter.Fill(this.saleDataSet.CardModes);

 

小楼宝宝的涂鸦花花(Imitater)的博客起名称骨测字皖ICP备06000023号-17