请问:datagird的内容不可以修改,添加。只能做删除一行的操作。怎么实现,最好是有按钮列,但是在winfrom里没有啊??

mytwins 2004-11-21 09:13:07
具体是做一个图书销售,datagird类似一个购物车,已完成把图书添加进去,但是怎么删除图书(即一行),同时datagird得处于不能编辑的状态,或只能编辑删除一行,谢谢高手了!!
...全文
198 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
mqmmx 2004-11-21
  • 打赏
  • 举报
回复
用readonly=true把datagrid改为只读,直接删除与datagrid有关联的datatable中的内容就行了,如datatable 为mytable可以这样写 myTable.Rows.RemoveAt(DataGrid1.CurrentRowIndex)其中datagrid1.currentrowindex为当前选中的行.
mytwins 2004-11-21
  • 打赏
  • 举报
回复
是阿,事件中的代码该怎么写呢?比如怎样获取当前行,还有怎样删除??清执教啊!
pianoman 2004-11-21
  • 打赏
  • 举报
回复

datagird得处于不能编辑的状态:datagrid1.readonly=true.
另外你要删除一行,自己添加一个删除按钮,在点击事件中获取datagrid的当前行,删除即可。这样实现简单,为什么非要想和webform里的形式一样。
locateangel 2004-11-21
  • 打赏
  • 举报
回复
前几天这个问题困扰了我好久,通过摸索发现几点经验
1.不能用removeat或remove,只能用delete()。因为一旦removeat以后,该记录就会在datatable里面被彻底删除,这样的话,你在update的时候,由于update只对存在于datatable里面的记录进行修改,所以你想删除的数据,还是删不下去。而delete()是在datatable里面把该数据打上删除标记,这样update的时候才能真正删掉。
1.不能用currentrowindex,因为如果你进行了一次删除,而没有update,这种情况下,你的datagrid里面的记录数和记录编号和datatable里面的就不一样了(因为刚刚删除的数据只是被打上了标记,没有真的删除,而该数据在datagrid里面已经不存在了)。在这种情况下,datagrid的currentrowindex不一定等于该记录在datatable里面的row。
exia 2004-11-21
  • 打赏
  • 举报
回复
mark,帮忙顶一下!!
locateangel 2004-11-21
  • 打赏
  • 举报
回复
在这个例子中,我的datatable是“login”,主键是“user_name”。小弟也是菜鸟,代码可能比较弱,莫笑。
locateangel 2004-11-21
  • 打赏
  • 举报
回复
像别的大虾说的,把dataGrid1的readonly属性设置为true,然后放一个“删除”按钮
“删除”按钮里面的代码:
CurrencyManager cm = (CurrencyManager)this.BindingContext[this.dataset11,"login"];
System.Data.DataView dv = (System.Data.DataView)cm.List;
ArrayList al = new ArrayList();
ArrayList us_id = new ArrayList();
for(int i = 0; i < dv.Count; i++)
{
if(this.dataGrid1.IsSelected(i))
{
us_id.Add(dv[i]["user_name"].ToString());
}
}

foreach(string i in us_id)
{
//MessageBox.Show(i.ToString(),m_int);
DataTable dt = new DataTable();
dt = this.dataset11.Tables["login"];
DataRow foundRow;
// Create an array for the key values to find.
object[]findTheseVals = new object[1];
// Set the values of the keys to find.
findTheseVals[0] = i;
foundRow = dt.Rows.Find(findTheseVals);
// Display column 1 of the found row.
if(foundRow != null)
{
foundRow.Delete();
}
}
确认以后,再dataadapter.update了,应该差不多了。
locateangel 2004-11-21
  • 打赏
  • 举报
回复
我有winform的代码,不知道你是不是需要
greennetboy 2004-11-21
  • 打赏
  • 举报
回复
1。把dataGrid1的readonly属性设置为true
2。添加一个删除button delbtn;
3.写delbtn的事件,通过dataGrid1.CurrentRowIndex获得当前选中的行,然后RemoveAt
打开链接下载源码: https://pan.quark.cn/s/8ec3d104bde6 华为MA5671是一款针对宽带接入需求而研发的智能型光猫设备,其核心应用场景为家庭用户及小型企业环境。该设备运用了千兆以太网技术,能够提供卓越的网络连接性能,从而使用户可以体验到稳定流畅的互联网服务。其完整名称为SmartAX MA5671,其中"SmartAX"是华为对其智能接入产品系的特定命名,意指该设备具备智能化管理功能与自动化配置特性。固件,即Firmware,是指存储于硬件设备内部的一套程序代码,负责控制设备的各项功能运作并合理调配硬件资源。在华为MA5671设备中,固件发挥着核心作用,它直接影响着设备的操作系统运行机制、网络协议兼容性、安全防护机制以及性能表现等多个维度。"MA5671V8R313C00SPC100"作为该固件的标识编号,通过此代码可以解析出以下几个关键层面的信息: 1. **V8**:这通常象征固件的主版本号,或许表明这是第8代产品形态或第8次主要升级迭代。 2. **R313**:这可能代表固件的次级版本或修订层级,暗示着相较于V8版本,该版本经历了313次的迭代优化。 3. **C00**:这部分或许与设备的特定型号设定或地域适配性相关,不同的C00编码可能对应不同的功能模块配置或区域适应性调整。 4. **SPC100**:最后的这一段编码可能标识着特殊版本或性能增强配置,SPC(Special Performance Configuration)可能是华为针对特定性能优化版本设定的代号,而100可能代表这种优化措施的等级或序编号。 在实际部署过程中,将固件保持为最新版本是非常重要的,这样能够有效修正已知的安全隐患,优化设备运作效能,...
代码转载自:https://pan.quark.cn/s/558f943fe8b9 Oracle 11g是由甲骨文公司推出的一款面向企业级应用的数据管理平台,其具备丰富的功能特性与性能优化措施,能够充分满足大型商业机构及组织的复杂数据管理诉求。这份“Oracle 11g官方中文帮助文档”作为一份高清晰度且内容全面的资源,专门为中文使用者提供系统化的操作指引和必要的技术支持。 1. **Oracle 11g核心构成** - 数据库模型:该系统基于关系数据库架构,负责对结构化数据进行系统化存储和处理。 - 实例与服务机制:数据库实例指的是部署在服务器内存中的运行环境,而服务则是客户端接入数据库的核心通道。 2. **部署与设置** - 部署模式:涵盖高级部署流程和快速部署方案,以适应多样化的应用场景。 - 参数配置文件:初始化参数文件(init.ora)用于设定数据库的运行环境参数。 - 逻辑存储与物理存储:表空间作为数据库对象的逻辑组织单元,数据文件则是实际存放数据的物理载体。 3. **SQL与PL/SQL技术** - SQL指令集:主要用于数据库数据的查询、录入、修改删除操作。 - PL/SQL编程:作为Oracle的特色编程语言,支持过程化编程范式,常用于开发存储过程和触发器逻辑。 4. **安全防护机制** - 用户身份与角色管理:通过用户账户和角色权限体系来控制数据库的访问权限。 - 授权管理及审计功能:实现数据访问权限的精细化控制,并记录数据库活动日志以保障合规操作。 5. **效能提升策略** - 查询执行优化器:智能选择最优的查询执行路径。 - 重日志与归档机制:保障事务的持久性和系统故障后的恢复能力。 - 数据分区技术:通过将大型数据表...

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧