理解错误!DataGridView 是需要和 虚拟数据库捆绑起来的吧(DataSet)你把DataGridView 只需看作是一个容器就好, 直接删除DataSet中的数据.
就可以删除DataGridView中的数据了.你要是看不明白我给你写一段代码.using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
//引入和数据库连接的命名空间
using System.Data.SqlClient;namespace DateBookForm
{
    public partial class Test : Form
    {
        public Test()
        {
            InitializeComponent();
        }        // 刷新次数
        private int LoadNum = 2;        //创建SqlConnection对象
        SqlConnection con = new SqlConnection("Server=.; DataBase = Test; uid = sa; pwd = sa");
        //创建DataSet
        DataSet ds = new DataSet();
        //引入SqlDataAdapter;
        SqlDataAdapter adapter;        
        /// <summary>
        /// 窗体加载时
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Test_Load(object sender, EventArgs e)
        {
            FillSet();        }        /// <summary>
        /// DataSet填充方法
        /// </summary>
        private void FillSet()
        {
            //在刷新次数是第一次的时候访问数据库并且添加到DataSet中
            if (LoadNum == 0)
            {
                con.Open();                //使用SqlDataAdapter adapter
                adapter = new SqlDataAdapter("select * from users",con);
                adapter.Fill(ds);
                adapter.Update(ds);
                //给DataGirdView捆绑数据
                dataGridView1.DataSource = ds.Tables[0];
                //判断是否有数据
                if (dataGridView1.Rows.Count >= 1)
                {
                    MessageBox.Show("填充成功!");
                    
                }
                con.Close();            }
        }        /// <summary>
        /// 点击删除按钮
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                //选中的行是1的时候
                if (dataGridView1.SelectedRows.Count == 1)
                {
                    //删除数据
                    dataGridView1.Rows.Remove(dataGridView1.SelectedRows[0]);                    ///////////////////////////////////////
                    //////////////////////////////////////
                    //以下为附加代码,可用可不用, 作用是根据DataGirdView的现有数据,更新数据库.
                    SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
                    adapter.Update(ds);
                }
                else
                {
                    MessageBox.Show("请从新选择!");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}完美实现你要的功能, 注意注释.我写的很详细了.

解决方案 »

  1.   


    private int LoadNum = 2;//改成
    private int LoadNum = 0;//Load 方法最后一段LoadNum++;抱歉, 刚才测试的时候忘记了~~ 
    现在纠错来了...
      

  2.   

    复制好后,将相应内容从DataGridView中Remove掉(行或某[些]单元格若要与数据库同步,可考虑使用CommandBuilder(与sql结合较好)
      

  3.   

    回复一楼的朋友:
        我知道DataGridView是和数据集绑定的,我已经绑定填充好了的。数据已经在DataGridView控件上显示了。我的意思是
    我在单元格中选中了一个值,然后利用菜单项里的‘剪切’把单元格里的值给剪掉,这一个功能的实现。
     //删除数据                         
    dataGridView1.Rows.Remove(dataGridView1.SelectedRows[0]);
    你这不是把整个选中的行给删掉了吗?我要删的是单元格的值不是整个数据行,谢谢!
    三楼的朋友:
       你能告诉我DataGridView怎么定位到我随意选中的一个单元格吗?
      

  4.   

    那就改为.
    dataGridView1.SelectedCells[0].Value = null;
      

  5.   

       谢谢你的回复,但是dataGridView.selectedCells[int index]index表示说选单元格的索引号
    可是剪切是随便的选择单元格,根本就没有固定单元格的索引号的。我甚至用这个算法都报错
       private void 剪切toolStripMenuItem4_Click(object sender, EventArgs e) 
      { 
        Clipboard.SetDataObject(this.dataGridView1.CurrentCell.Value.ToString()); //先复制       for(int counter=0;counter<dataGridView.SelectedCells.count;counter++) //然后删除
            {
              if(ClipBoard.GetText()==dataGridView.SelectedCells[i].Value.ToString())
                  {
                      this.BindingSource.Remove(dataGridView.SelectedCells.Value)
                   }
             }
       }