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

mytwins 2004-11-21 09:13:07
具体是做一个图书销售,datagird类似一个购物车,已完成把图书添加进去,但是怎么删除图书(即一行),同时datagird得处于不能编辑的状态,或只能编辑删除一行,谢谢高手了!!
...全文
157 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

110,531

社区成员

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

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

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