DataTable中删除关联信息表记录
比如有这样一个存放在内存中的临时表
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




