[如何解决]除非 DataGridView 被数据绑定到支持更改通知并允许删除的 IBindingList,否则不能以编程方式移除行。

问题描述

我刚刚开始学C#,现在在做一个项目,在看前人的代码。现在想实现的是,在界面上按按钮删除一些数据,数据库中对应row的数据也删除。privatevoidDeleteSelectedButton_Click(objectsender,EventArgse){if(MessageBox.Show("删除所选记录,你确定吗?","确认删除",MessageBoxButtons.OKCancel,MessageBoxIcon.Warning)==DialogResult.Cancel)return;for(inti=HistoryView.Rows.Count-1;i>=0;i--){DataGridViewRowrow=HistoryView.Rows[i];if(Convert.ToBoolean(row.Cells[0].Value)==true){HistoryView.Rows.RemoveAt(i);}}maOp.manDB.SubmitChanges();}

但是会报“除非DataGridView被数据绑定到支持更改通知并允许删除的IBindingList,否则不能以编程方式移除行。”的错误。我尝试绑定IBindingList如下:HistoryView.DataSource=maOp.GetOldHistory(DateTime.Now);BindingSourcebs=newBindingSource();BindingList<Man_Log>bl=newBindingList<Man_Log>(maOp.GetOldHistory(DateTime.Now));bl.AllowRemove=true;HistoryView.ReadOnly=false;bs.DataSource=bl;HistoryView.DataSource=bs;

又会报错:“集合是只读的”。请教应该怎么弄?谢谢

解决方案

本帖最后由 shichuanwuhan 于 2010-03-26 15:28:15 编辑
解决方案二:
直接删除数据库中的数据,然后重新给DATAGRIDVIEW绑定数据源
解决方案三:
抛出异常try{sqlconnectionsqlconnection=newsqlconnection(连接数据库);//先创建sqlconnection对象,并连接sql数据库this.sqlconnection.Open();//在打开sql数据库连接sqlcommandsqlcommand=newsqlcommand("deletefrom表名",this.sqlconnection)//在创建sqlcommand对象,并写sql语句this.i=this.sqlcommand.ExecuteNonery();//调用sqlcommand的方法if(i!=0)//判断{MessageBox.Show("删除成功!");}else{MessageBox.Show("删除失败!");}}catch(Exceptionex){}finally{this.sqlconnection.Close();//最后关闭}可以试用下
解决方案四:
引用1楼leon9090的回复:

直接删除数据库中的数据,然后重新给DATAGRIDVIEW绑定数据源

我只会删除界面上的条目,不知道如何直接删除数据库里的。是用RemoveAt么?我初学,啥都不会。
解决方案五:
但是会报“除非DataGridView被数据绑定到支持更改通知并允许删除的IBindingList,否则不能以编程方式移除行。”的错误你在用HistoryView这个做XUN环,在其XUN环内部是不能删除它的行的。
解决方案六:
你需要将删除操作提交到数据库
解决方案七:
引用4楼wwx6312388的回复:

但是会报“除非DataGridView被数据绑定到支持更改通知并允许删除的IBindingList,否则不能以编程方式移除行。”的错误你在用HistoryView这个做XUN环,在其XUN环内部是不能删除它的行的。

请教下应该怎么弄呢?我这里必须要用到循环。我没有用DataGridViewRow作循环体,用的是DataGridView的index也不行么?
解决方案八:
引用5楼lost_painting的回复:

你需要将删除操作提交到数据库

就是不会这个。。。能不能写一两句代码让我参考一下?
解决方案九:
我现在知道需要:“在数据源中删除数据,刷新显示控件”。谁能给段小代码如何在数据库中删除数据?我大概明白就结贴了。
解决方案十:
publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}privateDataTabledt=newDataTable();privateOdbcDataAdapterda=newOdbcDataAdapter();privatevoidForm1_Load_1(objectsender,EventArgse){OdbcConnectioncn=newOdbcConnection("driver={IBMDB2ODBCDRIVER};Database=SDDT;hostname=223.1.1.19;port=50000;protocol=TCPIP;uid=LLL;pwd=BCL987;CurrentSchema=SDDT;");OdbcCommandcom=newOdbcCommand("select*fromMODEL",cn);da=newOdbcDataAdapter(com);DataTabledt=newDataTable();dt.Locale=System.Globalization.CultureInfo.InvariantCulture;da.Fill(dt);this.dataGridView1.DataSource=dt;}privatevoidgetupdate(){dt=dataGridView1.DataSourceasDataTable;//把DataGridView绑定的数据源转换成DataTableOdbcCommandBuildercb=newOdbcCommandBuilder(da);//将数据放到datatable中datagridview的数据源是datatable//修改datagridview//更新da.Update(dt);}privatevoidbutton1_Click_1(objectsender,EventArgse){this.getupdate();MessageBox.Show("更新成功");}privatevoidbutton2_Click(objectsender,EventArgse){OdbcConnectioncon=Program.createConnection();con.Open();DataSetds=newDataSet();DataTabledt=newDataTable();stringquerysql="select*fromMODEL";OdbcDataAdapterda=newOdbcDataAdapter(querysql,con);da.Fill(ds,"tab");dt=ds.Tables[0];this.dataGridView1.DataSource=dt;con.Close();}privatevoidbutton3_Click(objectsender,EventArgse){introw=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("删除成功");}}

解决方案十一:
IListlist=(IList)datagridview1.DataSource;list.RemoveAt(datagridview1.CurrentRow.Index);datagridview1.DataSource=null;datagridview1.DataSource=list;因为你绑定的数据源是list等集合,不是datagridview指定的数据源,所以可以帮数据源转为list,再从集合类中remove,最后在绑定就ok

时间: 2025-01-21 05:12:39

[如何解决]除非 DataGridView 被数据绑定到支持更改通知并允许删除的 IBindingList,否则不能以编程方式移除行。的相关文章

如何让ASP.NET默认的资源编程方式支持非.ResX资源存储

之前写了两篇文章<.NET资源并不限于.ResX文件>(上篇.下篇),介绍了如何通过自定义ResourceManager的方式来扩展资源的存储形式.在那篇文章中,我定义了三种基于独立文件的ResourceManager(ResXResourceManager.BinaryResourceManager和XmlResoureManager)分别实现对.ResX,.Resource和.xml三种资源文件的访问.在本篇文章中我们将实现自定义ResourceManager和ASP.NET之间的集成,让

【万里征程——Windows App开发】数据绑定——简单示例、更改通知、数据转换

简单的数据绑定示例 相比于理论,我更倾向于从实践中开始博客,尤其是对于数据绑定.那么,我们先来看看几个简单的例子. 1.数据绑定到TextBox 我们依旧使用前面的闹钟类来开始.在下面的代码中,我们有属性.构造函数,还有一个ToString()方法的重载.之所以重载这个方法是因为我们想在最后绑定的时候,这三个属性能够在TextBox上显示得更加工整. public class Alarm { public string Title { get; set; } public string Desc

我想在datagridview离开行的时候做一个数据验证,如果不正确就回到上一次的行.

问题描述 我想在datagridview离开行的时候做一个数据验证,如果不正确就回到上一次的行.privatevoidDGV_bDT_CellEnter(objectsender,DataGridViewCellEventArgse){///没有过验证DGV_bDT.CurrentCell=DGV_bDT.Rows[xxx].Cells[xxx];}这时出错OperationisnotvalidbecauseitresultsinareentrantcalltotheSetCurrentCell

给Gridview绑定数据,数据是存在项目里的, 求帮谢谢!运行下面代码报错:当控件被数据绑定时,无法以编程方式向 DataGridView 的行集合中添加行

问题描述 #region绑定DataGridView方法privatevoidDataGridViewBind(){DataTabledtSupplier=_SupplierFacade.GetSMSupplierContacterInfoByFid(iSupplierID);DataViewdvSupplier=dtSupplier.DefaultView;//((DataTable)dgvSupplierContInfo.DataSource).Rows.Add();dvSupplier.S

一起谈.NET技术,如何让ASP.NET默认的资源编程方式支持非.ResX资源存储

之前写了两篇文章<.NET资源并不限于.ResX文件>(上篇.下篇),介绍了如何通过自定义ResourceManager的方式来扩展资源的存储形式.在那篇文章中,我定义了三种基于独立文件的ResourceManager(ResXResourceManager.BinaryResourceManager和XmlResoureManager)分别实现对.ResX,.Resource和.xml三种资源文件的访问.在本篇文章中我们将实现自定义ResourceManager和ASP.NET之间的集成,让

解决windows server 2003上不支持.流式flv的问题

有许多朋友在论坛上提到在windows server 2003上不能支持FLV格式的流式播放问题. 原因是由于windows server 2003上并没有.FLV的这种mime-type类型,对于这一点Adobe给出了它的解决方案.如下: 1. 在2003服务器上,找开IIS管理器. 2. 展开本地服务器名称,右击选择属性,在Internet信息服务标签上,点击最下方的计算机MIME映射下面的编辑按钮. 3. 点击"新类型"按钮,扩展名添上".FLV",内容类型(

暂时性的解决datagrid控件数据绑定时候xxx字段不属于xxx表的错误

datagrid|datagrid控件|错误|定时|解决|数据   using System;using System.Collections;using System.ComponentModel;using System.Drawing;using System.Data;using System.Windows.Forms; namespace Device.Forms.UI.Grids{ /// <summary> /// NewDataGrid 的摘要说明. /// </sum

如何解决Mint Linux自定义快捷键不支持中文路径的问题

在Mint Linux中的"开始"->"控制面板"->"系统设置面板"菜单,打开的系统设置界面中,单击"键盘",打开键盘配置界面,单击"键盘快捷键"标签页,单击"自定义快捷键"打开添加快捷键的对话框,选择带有中文路径的执行文件,如:当前用户目录下的 下载/runwps.sh 在进行选定了后,结果在"指令"栏中显示的为/home/user/%E4%B8%8B

html5shiv解决低版本ie浏览器不支持html5元素的办法

八年抗战,html5终于定稿,近年来,随着html5的盛行,我们在页面中也越来越多的运用到html5元素,但是悲催的是,脑残的IE的低版本实在让人抓狂,咱们辛苦规划好的页面在这些IE版别下显得是浆糊一桶.为了让这不一样的IE版别之间能"认识"HTML5元素,开源的html5shiv呈现了! 1.html5shiv的特点 html5shiv的最大特点是让那些个不认HTML5的IE浏览器认出HTML5元素,并依照最基本的处理方法处理HTML5元素--块化(display:block).这样