最近一段时间一直在围绕树形控件在做东西
在最开始的一段时间里由于开始所用的数据类型是用数据组实现的
造成在后期的树形控件的节点的添加困难
最终还是取消了用数组来实现,而用了DataSet
主要相关代码:
private
void
treeView1_AfterSelect(
object
sender, System.Windows.Forms.TreeViewEventArgs e)

{
try

{
//节点为根节点
if(this.treeView1.SelectedNode.Parent ==null)

{
flagIOServer =true;
this.tabControl1.SelectedIndex =0;
this.menuItem_AddIOServer.Enabled=true;
this.menuItem_AddSubSystem.Enabled=false;
this.menuItem_AddSystem.Enabled=false;
this.menuItem_AddTag.Enabled=false;
this.menuItem_DeleteSubSystem.Enabled=false;
this.menuItem_DeleteSystem.Enabled=false;
this.menuItem_UpdateTag.Enabled=false;
ds.Tables.Clear();
comm.CommandText ="select TagID 列表ID ,AutoSubSysID 子系统ID,TagCode 节点编码,TagName 节点名称,TagType 节点类型,TagValueType 数据类型,TagMaxValue 最大值,TagMinValue 最小值,TagAlartMax 报警最大值 ,TagAlartMin 报警最小值,TagSaveInterval 存储时间间隔,TagSaveIgBand 存储变化盲区,CreateTime 创建时间,TimeStampMode 时戳确定方式,TagAlartPos 报警点,TagAlartPosDes 报警点描述,Description 描述 from TagInfo";
da = new OracleDataAdapter(comm.CommandText,conn);
if(conn.State.ToString()=="Open")

{
da.Fill(ds,"TagInfo");
conn.Close();
takeHideValue("TagInfo");
this.dataGrid1.DataSource =ds.Tables["TagInfo"];
}
else

{
conn.Open();
da.Fill(ds,"TagInfo");
conn.Close();
takeHideValue("TagInfo");
this.dataGrid1.DataSource=ds.Tables["TagInfo"];
}
}
//节点为IOServer节点
else if(this.treeView1.SelectedNode.Parent.Parent ==null)

{
flagSystem =true;
flagIOServer =false;
selectNode =this.treeView1.SelectedNode;
this.tabControl1.SelectedIndex =2;
this.menuItem_AddIOServer.Enabled=true;
this.menuItem_AddSubSystem.Enabled=false;
this.menuItem_AddSystem.Enabled=true;
this.menuItem_AddTag.Enabled=false;
this.menuItem_DeleteSubSystem.Enabled=false;
this.menuItem_DeleteSystem.Enabled=false;
this.menuItem_UpdateTag.Enabled=false;
string ID =this.treeView1.SelectedNode.Text.ToString().Trim().Substring(0,10);
comm.CommandText="select * from IOServerInfo where IOServerID =";
comm.CommandText+="'"+ID+"'";
da = new OracleDataAdapter(comm.CommandText,conn);
if(conn.State.ToString()=="Open")

{
da.Fill(ds,"tab_IO");
conn.Close();
}
else

{
conn.Open();
da.Fill(ds,"tab_IO");
conn.Close();
}
foreach(DataRow RowIO in ds.Tables["tab_IO"].Rows)

{
this.txt_IOServerCode.Text =RowIO[1].ToString().Trim();
this.txt_IOServerName.Text=RowIO[2].ToString().Trim();
this.rtxt_IOServer.Text=RowIO[4].ToString().Trim();
}
ds.Tables.Clear();
comm.CommandText="select TagID 列表ID ,TagInfo.AutoSubSysID 子系统ID,TagCode 节点编码,TagName 节点名称,TagType 节点类型,TagValueType 数据类型 ,TagMaxValue 最大值,TagMinValue 最小值,TagAlartMax 报警最大值 ,TagAlartMin 报警最小值,TagSaveInterval 存储时间间隔,TagSaveIgBand 存储变化盲区,TagInfo.CreateTime 创建时间,TagInfo.TimeStampMode 时戳确定方式,TagAlartPos 报警点,TagAlartPosDes 报警点描述,TagInfo.Description 描述 from TagInfo where AutoSubSysID in (select AutoSubSysID from ";
comm.CommandText+="AutoSubSystemInfo where AutoSysID in (select AutoSysID from AutoSystemInfo where IOServerID";
comm.CommandText+=" in(select IOServerID from IOServerInfo where IOServerID =";
comm.CommandText+="'"+ID+"'";
comm.CommandText+=")))";
da = new OracleDataAdapter(comm.CommandText,conn);
if(conn.State.ToString()=="Open")

{
da.Fill(ds,"Tag_IOServer");
conn.Close();
}
else

{
conn.Open();
da.Fill(ds,"Tag_IOServer");
conn.Close();
}
takeHideValue("Tag_IOServer");
this.dataGrid1.DataSource=ds.Tables["Tag_IOServer"];
}
//节点为系统节点
else if(this.treeView1.SelectedNode.Parent.Parent.Parent ==null)

{
flagSysSub =true;
flagSystem =false;
selectNode =this.treeView1.SelectedNode;
this.tabControl1.SelectedIndex =1;
this.menuItem_AddIOServer.Enabled=false;
this.menuItem_AddSubSystem.Enabled=true;
this.menuItem_AddSystem.Enabled=true;
this.menuItem_AddTag.Enabled=false;
this.menuItem_DeleteSubSystem.Enabled=false;
this.menuItem_DeleteSystem.Enabled=true;
this.menuItem_UpdateTag.Enabled=false;
string ID =this.treeView1.SelectedNode.Text.ToString().Trim().Substring(0,10);
comm.CommandText="select * from AutoSystemInfo where AutoSysID =";
comm.CommandText+="'"+ID+"'";
da = new OracleDataAdapter(comm.CommandText,conn);
if(conn.State.ToString()=="Open")

{
da.Fill(ds,"tab_Sys");
conn.Close();
}
else

{
conn.Open();
da.Fill(ds,"tab_Sys");
conn.Close();
}
foreach(DataRow RowSys in ds.Tables["tab_Sys"].Rows)

{
this.txt_SysName.Text =RowSys[4].ToString().Trim();
this.txt_SysCode.Text =RowSys[3].ToString().Trim();
switch(RowSys[7].ToString())

{
case "0":this.cmb_SysMode.Text="实时";
break;
case "1":this.cmb_SysMode.Text="非实时";
break;
default:
break;
}
}
string IOID =this.treeView1.SelectedNode.Parent.Text.ToString().Trim().Substring(0,10);
comm.CommandText="select * from IOServerInfo where IOServerID =";
comm.CommandText+="'"+IOID+"'";
da =new OracleDataAdapter(comm.CommandText,conn);
if(conn.State.ToString()=="Open")

{
da.Fill(ds,"SysIOID");
conn.Close();
}
else

{
conn.Open();
da.Fill(ds,"SysIOID");
conn.Close();
}
foreach(DataRow RowSysID in ds.Tables["SysIOID"].Rows)

{
this.txt_SysIOID.Text =IOID;
this.txt_SysIOName.Text =RowSysID[2].ToString();
}
ds.Tables.Clear();
comm.CommandText="select TagID 列表ID ,TagInfo.AutoSubSysID 子系统ID,TagCode 节点编码,TagName 节点名称,TagType 节点类型,TagValueType 数据类型 ,TagMaxValue 最大值,TagMinValue 最小值,TagAlartMax 报警最大值 ,TagAlartMin 报警最小值,TagSaveInterval 存储时间间隔,TagSaveIgBand 存储变化盲区,TagInfo.CreateTime 创建时间,TagInfo.TimeStampMode 时戳确定方式,TagAlartPos 报警点,TagAlartPosDes 报警点描述,TagInfo.Description 描述 from TagInfo where AutoSubSysID in (select AutoSubSysID from";
comm.CommandText+=" AutoSubSystemInfo where AutoSysID in (select AutoSysID from AutoSystemInfo";
comm.CommandText+=" where AutoSysID =";
comm.CommandText+="'"+ID+"'";
comm.CommandText+="))";
da = new OracleDataAdapter(comm.CommandText,conn);
if(conn.State.ToString()=="Open")

{
da.Fill(ds,"Tag_Sys");
conn.Close();
}
else

{
conn.Open();
da.Fill(ds,"Tag_Sys");
conn.Close();
}
takeHideValue("Tag_Sys");
this.dataGrid1.DataSource=ds.Tables["Tag_Sys"];
}
//节点为子系统节点
else if(this.treeView1.SelectedNode.Parent.Parent.Parent.Parent ==null)

{
flagSysSub =false;
selectNode =this.treeView1.SelectedNode;
this.tabControl1.SelectedIndex =3;
string ID = this.treeView1.SelectedNode.Text.ToString().Trim().Substring(0,10);
comm.CommandText="select count(*) from TagInfo where AutoSubSysID =";
comm.CommandText+="'"+ID+"'";
int count;
if(conn.State.ToString()=="Open")

{
count=Convert.ToInt32(comm.ExecuteScalar());
conn.Close();
}
else

{
conn.Open();
count =Convert.ToInt32(comm.ExecuteScalar());
conn.Close();
}
if(count>0)

{
this.menuItem_AddIOServer.Enabled=false;
this.menuItem_AddSubSystem.Enabled=true;
this.menuItem_AddSystem.Enabled=false;
this.menuItem_AddTag.Enabled=false;
this.menuItem_DeleteSubSystem.Enabled=true;
this.menuItem_DeleteSystem.Enabled=false;
this.menuItem_UpdateTag.Enabled=true;
}
else

{
this.menuItem_AddIOServer.Enabled=false;
this.menuItem_AddSubSystem.Enabled=true;
this.menuItem_AddSystem.Enabled=false;
this.menuItem_AddTag.Enabled=true;
this.menuItem_DeleteSubSystem.Enabled=true;
this.menuItem_DeleteSystem.Enabled=false;
this.menuItem_UpdateTag.Enabled=false;
}
comm.CommandText ="select * from AutoSubSystemInfo where AutoSubSysID =";
comm.CommandText+="'"+ID+"'";
da = new OracleDataAdapter(comm.CommandText,conn);
if(conn.State.ToString()=="Open")

{
da.Fill(ds,"SubSys");
conn.Close();
}
else

{
conn.Open();
da.Fill(ds,"SubSys");
conn.Close();
}
foreach(DataRow RowSubSys in ds.Tables["Subsys"].Rows)

{
this.txt_SubCode.Text =RowSubSys[2].ToString();
this.txt_SubName.Text =RowSubSys[3].ToString();
this.rtxt_SubInfo.Text=RowSubSys[5].ToString();
}
comm.CommandText="select * from AutoSystemInfo where AutoSysID =";
comm.CommandText+="'"+this.treeView1.SelectedNode.Parent.Text.ToString().Trim().Substring(0,10)+"'";
da = new OracleDataAdapter(comm.CommandText,conn);
if(conn.State.ToString()=="Open")

{
da.Fill(ds,"SubSysSysID");
conn.Close();
}
else

{
conn.Open();
da.Fill(ds,"SubSysSysID");
conn.Close();
}
foreach(DataRow RowSubSysSysID in ds.Tables["SubSysSysID"].Rows)

{
this.txt_SysSubName.Text=RowSubSysSysID[4].ToString();
}
ds.Tables.Clear();
comm.CommandText ="select TagID 列表ID ,AutoSubSysID 子系统ID,TagCode 节点编码,TagName 节点名称,TagType 节点类型,TagValueType 数据类型,TagMaxValue 最大值,TagMinValue 最小值,TagAlartMax 报警最大值 ,TagAlartMin 报警最小值,TagSaveInterval 存储时间间隔,TagSaveIgBand 存储变化盲区,CreateTime 创建时间,TimeStampMode 时戳确定方式,TagAlartPos 报警点,TagAlartPosDes 报警点描述,Description 描述 from TagInfo where AutoSubSysID =";
comm.CommandText+="'"+this.treeView1.SelectedNode.Text.ToString().Trim().Substring(0,10)+"'";
da = new OracleDataAdapter(comm.CommandText,conn);
if(conn.State.ToString()=="Open")

{
da.Fill(ds,"Tag_SubSys");
conn.Close();
}
else

{
conn.Open();
da.Fill(ds,"Tag_SubSys");
conn.Close();
}
takeHideValue("Tag_SubSys");
this.dataGrid1.DataSource =ds.Tables["Tag_SubSys"];
}
}
catch(Exception ex)

{
MessageBox.Show(ex.Message,title,MessageBoxButtons.OK,MessageBoxIcon.Information);
}

}
在DataSet中手动添加节点:
private
DataTable IOServerNode
=
new
DataTable(
"
IOServerNode
"
);
private
DataTable SubSysNode
=
new
DataTable(
"
SubSysNode
"
);
private
DataTable SysNode
=
new
DataTable(
"
SysNode
"
);
IOServerNode.Columns.Add(
"
IOServerID
"
,
typeof
(
string
));
IOServerNode.Columns.Add(
"
IOServerName
"
,
typeof
(
string
));
SysNode.Columns.Add(
"
AutoSysID
"
,
typeof
(
string
));
SysNode.Columns.Add(
"
AutoSysName
"
,
typeof
(
string
));
SysNode.Columns.Add(
"
IOServerID
"
,
typeof
(
string
));
SubSysNode.Columns.Add(
"
AutoSubSysID
"
,
typeof
(
string
));
SubSysNode.Columns.Add(
"
AutoSubSysName
"
,
typeof
(
string
));
SubSysNode.Columns.Add(
"
AutoSysID
"
,
typeof
(
string
));
dsNode.Tables.Add(IOServerNode);
dsNode.Tables.Add(SysNode);
dsNode.Tables.Add(SubSysNode);
//
DataRowCollection rc;
//
DataRow newRow;
//
object [] rowValues = new object[2];
//
rowValues[0]="0000000210";
//
rowValues[1]="这是一个测试";
//
rc =dsNode.Tables["IOServerNode"].Rows;
//
newRow =dsNode.Tables["IOServerNode"].NewRow();
//
newRow = rc.Add(rowValues);
//
dsNode.Tables["IOServerNode"].ImportRow(newRow);