CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

DataTable中删除关联信息表记录

楼主wfhelp()2006-06-02 10:47:08 在 .NET技术 / C# 提问

比如有这样一个存放在内存中的临时表  
  Id     ParentId  
  1         0  
  2         0  
  3         0  
  4         2  
  5         2  
  6         4  
  7         3  
  我删除掉id   =2   的结点时,要把相关联的id=4,5,6的记录都删除.下面我写了个但是不正确,请大家指正错误并修改谢谢!这里的dtTree临时表,treeViewGetMen是我的一个TreeView控件名  
  #region   删除表记录  
  private   void   DeleteInfo(){  
  int   SelectNum   =   0;  
  TreeNode   GetNode   =   treeViewGetMen.SelectedNode;  
  dv   =   dtTree.DefaultView;  
  dv.Sort   =   "MenuParentId   ASC";  
  //获取选中的结点  
  if   (GetNode   ==   null)   return;  
  SelectNum   =   Int16.Parse(GetNode.Tag.ToString());  
  DataRowView[]   arrDRV   =   dv.FindRows(   SelectNum   );  
  if   (arrDRV.Length   ==   0)   return;  
  foreach   (   DataRowView   drv   in   arrDRV   )   {  
  dtTree.Rows.RemoveAt(   SelectNum   );  
  DeleteInfoNode(   ref   SelectNum   );  
  }  
  }  
   
  private   void   DeleteInfoNode(   ref   int   SelectNum)   {  
  //得到子结点所在行数据  
  //MessageBox.Show(   SelectNum.ToString());  
  DataRow[]   foundRows   =   dtTree.Select("MenuParentId   ="+   SelectNum.ToString()   ,"MenuId"   ,System.Data.DataViewRowState.Added);  
  if   (   foundRows.Length   ==   0   )   return;  
  for   (int   i=0;i<foundRows.Length;i++){  
  DataRow   row   =   foundRows[0];  
  DataRowView[]   arrDRV   =   dv.FindRows(   row[0]   );  
  foreach   (   DataRowView   drv   in   arrDRV   )   {  
  SelectNum   =   Int16.Parse(row[0].ToString());  
  dtTree.Rows.RemoveAt(   SelectNum   );  
  DeleteInfoNode(   ref   SelectNum   );  
  }  
  }  
  }  
  #endregion 问题点数:20、回复次数:3Top

1 楼wfhelp()回复于 2006-06-02 11:17:25 得分 0

在有人能帮忙解答下吗?Top

2 楼chenyuming2004(这辈子我算是废了)回复于 2006-06-02 11:43:32 得分 20

 
  //删除子结点的递归函数  
  private   void   DeleteInfoNode(DataTable   dt,   int   SelectNum)    
  {  
  DataRow[]   drs   =   dt.Select("ParentId="   +   SelectNum.ToString());  
  for   (int   i   =   0;i   <   drs.Length;i++)  
  {  
  DeleteInfoNode(dt,Convert.ToInt32(drs[i]["id"]));  
  dt.Rows.Remove(drs[i]);  
  }  
  }  
   
   
  调用示例  
   
  DataTable   dt   =   new   DataTable();  
  dt.Columns.Add("id");  
  dt.Columns.Add("ParentId");  
  DataRow   dr   =   dt.NewRow();  
   
  dr[0]=1;  
  dr[1]=0;  
  dt.Rows.Add(dr);  
   
  dr   =   dt.NewRow();  
  dr[0]=2;  
  dr[1]=0;  
  dt.Rows.Add(dr);  
   
  dr   =   dt.NewRow();  
  dr[0]=3;  
  dr[1]=0;  
  dt.Rows.Add(dr);  
   
  dr   =   dt.NewRow();  
  dr[0]=4;  
  dr[1]=2;  
  dt.Rows.Add(dr);  
   
  dr   =   dt.NewRow();  
  dr[0]=5;  
  dr[1]=2;  
  dt.Rows.Add(dr);  
   
  dr   =   dt.NewRow();  
  dr[0]=6;  
  dr[1]=4;  
  dt.Rows.Add(dr);  
   
  dr   =   dt.NewRow();  
  dr[0]=7;  
  dr[1]=3;  
  dt.Rows.Add(dr);  
   
  DeleteInfoNode(dt,2);  
  for   (int   i   =   0;i   <   dt.Rows.Count;i++)  
  {  
  if   (Convert.ToInt32(dt.Rows[i]["id"])   ==   2)  
  {  
  dt.Rows.RemoveAt(i);  
  break;  
  }  
  }Top

3 楼wfhelp()回复于 2006-06-02 13:12:04 得分 0

Thank   you   very   much!  
  Can   you   help   me   for   another   DataTable   problem?http://community.csdn.net/Expert/topic/4796/4796124.xml?temp=.5801508  
  Top

相关问题

关键词

得分解答快速导航

  • 帖主:wfhelp
  • chenyuming2004

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo