理解错误!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);
}
}
}
}完美实现你要的功能, 注意注释.我写的很详细了.
就可以删除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);
}
}
}
}完美实现你要的功能, 注意注释.我写的很详细了.
private int LoadNum = 2;//改成
private int LoadNum = 0;//Load 方法最后一段LoadNum++;抱歉, 刚才测试的时候忘记了~~
现在纠错来了...
我知道DataGridView是和数据集绑定的,我已经绑定填充好了的。数据已经在DataGridView控件上显示了。我的意思是
我在单元格中选中了一个值,然后利用菜单项里的‘剪切’把单元格里的值给剪掉,这一个功能的实现。
//删除数据
dataGridView1.Rows.Remove(dataGridView1.SelectedRows[0]);
你这不是把整个选中的行给删掉了吗?我要删的是单元格的值不是整个数据行,谢谢!
三楼的朋友:
你能告诉我DataGridView怎么定位到我随意选中的一个单元格吗?
dataGridView1.SelectedCells[0].Value = null;
可是剪切是随便的选择单元格,根本就没有固定单元格的索引号的。我甚至用这个算法都报错
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)
}
}
}