[如何解决]除非 DataGridView 被数据绑定到支持更改通知并允许删除的 IBindingList,否则不能以编程方式移除行。 本帖最后由 shichuanwuhan 于 2010-03-26 15:28:15 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 直接删除数据库中的数据,然后重新给DATAGRIDVIEW绑定数据源 抛出异常try{ sqlconnection sqlconnection = new sqlconnection(连接数据库);//先创建sqlconnection对象,并连接sql数据库 this.sqlconnection.Open();//在打开sql数据库连接 sqlcommand sqlcommand = new sqlcommand("delete from 表名 ",this.sqlconnection)//在创建sqlcommand对象,并写sql语句 this.i = this.sqlcommand.ExecuteNonery();//调用sqlcommand的方法 if(i!=0)//判断 { MessageBox.Show("删除成功!"); } else { MessageBox.Show("删除失败!"); }}catch(Exception ex){}finally{ this.sqlconnection.Close();//最后关闭}可以试用下 我只会删除界面上的条目,不知道如何直接删除数据库里的。是用RemoveAt么?我初学,啥都不会。 但是会报“除非 DataGridView 被数据绑定到支持更改通知并允许删除的 IBindingList,否则不能以编程方式移除行。”的错误你在用HistoryView这个做XUN环,在其XUN环内部是不能删除它的行的。 请教下应该怎么弄呢?我这里必须要用到循环。我没有用DataGridViewRow作循环体,用的是DataGridView的index也不行么? public partial class Form1 : Form { public Form1() { InitializeComponent(); } private DataTable dt = new DataTable (); private OdbcDataAdapter da = new OdbcDataAdapter(); private void Form1_Load_1(object sender, EventArgs e) { OdbcConnection cn = new OdbcConnection("driver={IBM DB2 ODBC DRIVER};Database=SDDT;hostname=223.1.1.19;port=50000; protocol=TCPIP;uid=LLL;pwd=BCL987; CurrentSchema=SDDT;"); OdbcCommand com = new OdbcCommand("select * from MODEL", cn); da =new OdbcDataAdapter (com ); DataTable dt = new DataTable(); dt .Locale = System .Globalization .CultureInfo .InvariantCulture ; da.Fill(dt); this.dataGridView1.DataSource = dt; } private void getupdate() { dt = dataGridView1.DataSource as DataTable;//把DataGridView绑定的数据源转换成DataTable OdbcCommandBuilder cb = new OdbcCommandBuilder(da); //将数据放到datatable 中 datagridview 的数据源 是datatable //修改datagridview //更新 da.Update(dt); } private void button1_Click_1(object sender, EventArgs e) { this.getupdate(); MessageBox.Show("更新成功"); } private void button2_Click(object sender, EventArgs e) { OdbcConnection con = Program.createConnection(); con.Open(); DataSet ds = new DataSet(); DataTable dt = new DataTable(); string querysql = "select * from MODEL"; OdbcDataAdapter da = new OdbcDataAdapter(querysql, con); da.Fill(ds, "tab"); dt = ds.Tables[0]; this.dataGridView1.DataSource = dt; con.Close(); } private void button3_Click(object sender, EventArgs e) { int row = dataGridView1.SelectedRows.Count; if (MessageBox.Show("确认删除选中的" + row.ToString() + "条记录吗?", "请确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { while (row > 0) { ((DataRowView)dataGridView1.SelectedRows[0].DataBoundItem).Row.Delete(); row = row - 1; } this.getupdate(); MessageBox.Show("删除成功"); } } IList list = (IList)datagridview1.DataSource; list.RemoveAt(datagridview1.CurrentRow.Index); datagridview1.DataSource = null; datagridview1.DataSource = list;因为你绑定的数据源是list等集合,不是datagridview 指定的数据源,所以可以帮数据源转为list,再从集合类中remove,最后在绑定就ok c# 用Lable显示读取到的SQL数据 工厂模式中: 求.net解决方案 BYTE[]位置问题? 一个Form怎么得到另一个Form中字符串的值? 获取队列中各对象数据问题。 读 C#程序设计遇到的问题,请各位指教!!~ .net c/s架构窗体右下脚弹出公告栏, 像网页弹出广告一样的,求高手指教 数据库小问题!!!!!急!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 严格定时执行方法的思路 想做一个图形化监测软件 如何监控一个软件(如千千静听),并判断该软件是否失效?
try
{
sqlconnection sqlconnection = new sqlconnection(连接数据库);//先创建sqlconnection对象,并连接sql数据库
this.sqlconnection.Open();//在打开sql数据库连接
sqlcommand sqlcommand = new sqlcommand("delete from 表名 ",this.sqlconnection)
//在创建sqlcommand对象,并写sql语句
this.i = this.sqlcommand.ExecuteNonery();//调用sqlcommand的方法
if(i!=0)//判断
{
MessageBox.Show("删除成功!");
}
else
{
MessageBox.Show("删除失败!"); }
}catch(Exception ex)
{}finally
{
this.sqlconnection.Close();//最后关闭
}
可以试用下
请教下应该怎么弄呢?我这里必须要用到循环。
我没有用DataGridViewRow作循环体,用的是DataGridView的index也不行么?
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private DataTable dt = new DataTable ();
private OdbcDataAdapter da = new OdbcDataAdapter();
private void Form1_Load_1(object sender, EventArgs e)
{
OdbcConnection cn = new OdbcConnection("driver={IBM DB2 ODBC DRIVER};Database=SDDT;hostname=223.1.1.19;port=50000; protocol=TCPIP;uid=LLL;pwd=BCL987; CurrentSchema=SDDT;");
OdbcCommand com = new OdbcCommand("select * from MODEL", cn);
da =new OdbcDataAdapter (com );
DataTable dt = new DataTable();
dt .Locale = System .Globalization .CultureInfo .InvariantCulture ;
da.Fill(dt);
this.dataGridView1.DataSource = dt; } private void getupdate()
{
dt = dataGridView1.DataSource as DataTable;//把DataGridView绑定的数据源转换成DataTable
OdbcCommandBuilder cb = new OdbcCommandBuilder(da); //将数据放到datatable 中 datagridview 的数据源 是datatable
//修改datagridview
//更新
da.Update(dt);
}
private void button1_Click_1(object sender, EventArgs e)
{
this.getupdate();
MessageBox.Show("更新成功");
} private void button2_Click(object sender, EventArgs e)
{
OdbcConnection con = Program.createConnection();
con.Open(); DataSet ds = new DataSet();
DataTable dt = new DataTable();
string querysql = "select * from MODEL";
OdbcDataAdapter da = new OdbcDataAdapter(querysql, con);
da.Fill(ds, "tab");
dt = ds.Tables[0];
this.dataGridView1.DataSource = dt;
con.Close();
} private void button3_Click(object sender, EventArgs e)
{
int row = dataGridView1.SelectedRows.Count;
if (MessageBox.Show("确认删除选中的" + row.ToString() + "条记录吗?", "请确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
while (row > 0)
{
((DataRowView)dataGridView1.SelectedRows[0].DataBoundItem).Row.Delete();
row = row - 1;
}
this.getupdate();
MessageBox.Show("删除成功");
} }
list.RemoveAt(datagridview1.CurrentRow.Index);
datagridview1.DataSource = null;
datagridview1.DataSource = list;因为你绑定的数据源是list等集合,不是datagridview 指定的数据源,所以可以帮数据源转为list,再从集合类中remove,最后在绑定就ok