如何将类似图一的表,动态生成得到类似图二的树?
给思路就好,千恩万谢,一定给分。
图一的链接:http://vchelp.net/ASP/cdf_pic/200505/reply_1_890109.jpg
图二的连接:http://vchelp.net/ASP/cdf_pic/200505/reply_1_890108.jpg
给思路就好,千恩万谢,一定给分。
图一的链接:http://vchelp.net/ASP/cdf_pic/200505/reply_1_890109.jpg
图二的连接:http://vchelp.net/ASP/cdf_pic/200505/reply_1_890108.jpg
解决方案 »
- 关于在C#中为Treeview下各个根节点添加代码的问题
- 寻找!winform 多表头实现代码!!!
- 求:VS2005中使用datagridview进行添加删除修改
- 请帮帮忙,帮我将JAVA语句转成C#
- 在C#中执行存储过程
- C#内部窗口
- 通过平台调用一个C++的Dll,总是提示System.ExecutionEngineException
- 哪里可以找到window form listbox左右内容移动的源码
- 求winform简捷美观的界面原码,有菜单栏和工具栏
- 新手C#串口调试问题,能够发送,但是不能接收到数据。请大侠们指导。
- 在线等
- 我想实现一个类似web日记本的东西,在用treeview显示日期的时候,遇到了载入节点的困难
第一层:
TreeView1.Nodes.Add(node)下一层:TreeView1.Node[i].Nodes.Add(node)
方法:用SQLCommand + DataReader + while循环完成.DataReader drName = NameSQLCommand.ExcuteReader();
//NameSQLCommand这个命令中有Select distinct rjb_name from XXXtable
while(string mame = drName.Read())
{
TreeNode node = new Treenode(name);
TreeView1.Nodes.Add(node);
DataReader drYear = YearSQLCommand.ExcuteReader();
//这个SQL命令里要有Select distinct rjb_year from XXXtable where rjb_name = @name
while(....)
{
//这里面是月的...
}
}
//这个函数是生成树接点。
void TForm10::AddClass(int AId,TTreeNode *FatherNode)
{
TADOQuery *QryTmp;
TTreeNode *myNode;
TLabel *myLabel;
CheckCon();
QryTmp=new TADOQuery(this);
QryTmp->Connection=this->ADOConnection1;
QryTmp->Close();
QryTmp->SQL->Clear();
QryTmp->SQL->Add("select * from bjinfo");
QryTmp->SQL->Add("where fatherid="+IntToStr(AId));
QryTmp->Open();
while(!QryTmp->Eof)
{
myNode=TreeView1->Items->AddChild(FatherNode,QryTmp->FieldByName("bjmc")->AsString); myLabel=new TLabel(this);
myLabel->Visible=false;
myLabel->Caption=QryTmp->FieldByName("bjbh")->AsString;
myNode->Data=myLabel;
AddClass(QryTmp->FieldByName("bjbh")->AsInteger,myNode); //递归调用过程
QryTmp->Next();
}
delete QryTmp;}
//首次调用加载
AddClass(0,NULL);
select * from rjb order by rjb_id,rjb_name,rjb_year,rjb_month,rjb_day
2、逐个判断Name/Year/Month/Day是否相等,对应添加各级节点;
{
// 遍历第一级节点,有name则返回该节点,没有创建新的节点并返回。
}
private TreeNode GetYearNode(string year, TreeNode nameNode)
{
// 遍历nameNode下的所有二级节点,有year则返回该节点,没有创建新的节点并返回。
}
......
图的链接:http://vchelp.net/ASP/cdf_pic/200505/reply_1_890465.jpg
代码如下:private void Page_Load(object sender, System.EventArgs e)
{ SqlConnection cnn;
cnn=new SqlConnection("data source=(local);initial catalog=rqb;integrated security=SSPI");
cnn.Open(); DataSet ds=new DataSet ();
SqlDataAdapter cmName;
SqlDataAdapter cmYear;
SqlDataAdapter cmMonth;
TreeNode nodeName;
TreeNode nodeYear;
TreeNode nodeMonth; cmName=new SqlDataAdapter("select distinct day_emp_name from rqb_day", cnn);
cmName.Fill(ds, "Name");
foreach(DataRow rowName in ds.Tables ["Name"].Rows )
{
nodeName=new TreeNode ();
nodeName.Text=rowName["day_emp_name"].ToString ();
TreeView1.Nodes.Add(nodeName);
cmYear=new SqlDataAdapter("select distinct day_year,day_emp_name from rqb_day where day_emp_name='"+nodeName.Text+"'",cnn);
cmYear.Fill(ds,"Year"); foreach(DataRow rowYear in ds.Tables ["Year"].Rows )
{
nodeYear=new TreeNode ();
if(rowYear["day_emp_name"].ToString()==nodeName.Text )
{
nodeYear.Text=rowYear["day_year"].ToString ();
nodeName.Nodes.Add(nodeYear); } cmMonth=new SqlDataAdapter("select distinct day_month,day_year from rqb_day where day_year='"+nodeYear.Text+"'",cnn);
cmMonth.Fill(ds,"Month"); foreach(DataRow rowMonth in ds.Tables ["Month"].Rows )
{
nodeMonth=new TreeNode ();
if(rowMonth["day_year"].ToString ()==nodeYear.Text )
{
nodeMonth.Text =rowMonth["day_month"].ToString ();
nodeYear.Nodes.Add (nodeMonth);
}
} }
}
}
for(int i = 0 ; i < dataTable.Rows.Count ; i ++)
{
string name = dataTable.Rows[i]["name"].ToString();
string year = dataTable.Rows[i]["year"].Tostring();
string month = dataTable.Rows[i]["month"].ToString();
TreeNode node = GetNameNode(name);
node = GetYearNode(year, node);
node = GetMonthNode(month, year);
......
}
用treeview控键
然后在后台写一个循环,(我是用foreach来做的)
动态的生成你要的树型结构就行了
private void Init_Data()
{
if(Request.Cookies["drpcookie"]==null)
{
Response.Redirect("Limit.htm");
}
Microsoft.Web.UI.WebControls.TreeNode rootnode = new Microsoft.Web.UI.WebControls.TreeNode();
rootnode.Expanded = true;
TreeView1.Nodes.Add(rootnode);
HttpCookie cookie=this.Request.Cookies["drpcookie"];
string level=cookie.Values["level"];
rootnode.Text="**********";
string tem = conn.GetUserLevel(level);
CreateTree(tem,0, rootnode);
} private void CreateTree(string visible,int belong, Microsoft.Web.UI.WebControls.TreeNode rootnode)
{
SqlConnection connection = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["Connection"]);
string strSql;
//strSql="select * from tree where belong="+@belong+"and "+@visible+"=1";
strSql="select * from tree,"+visible+" where tree.id="+visible+".id and tree.belong="+@belong+"and "+visible+".visible<>0";
//"+@visible+"=1";
SqlCommand cmd=new SqlCommand(strSql,connection);
cmd.CommandTimeout = 30;
SqlDataAdapter custDA = new SqlDataAdapter();
custDA.SelectCommand = cmd;
connection.Open();
DataSet ds = new DataSet();
custDA.Fill(ds,"tree");
foreach(DataRow dr in ds.Tables[0].Rows)
{
Microsoft.Web.UI.WebControls.TreeNode treenode = new Microsoft.Web.UI.WebControls.TreeNode();
treenode.Text = dr["text"].ToString().Trim();
treenode.NavigateUrl = dr["url"].ToString().Trim();
treenode.Target = "fraRightFrame";
// treenode.CheckBox = true;
// treenode.Expanded = false;
rootnode.Nodes.Add(treenode);
int id = int.Parse(dr["id"].ToString().Trim());
CreateTree(visible,id, treenode);
}
ds.Clear();
connection.Close();
}这个是我以前动态生成树的程序
你做个参考吧!
{
nodeName=new TreeNode ();
nodeName.Text=rowName["day_emp_name"].ToString ();
TreeView1.Nodes.Add(nodeName);
cmYear=new SqlDataAdapter("select distinct day_year from rqb_day where day_emp_name='"+nodeName.Text+"'",cnn);
cmYear.Fill(ds,"Year"); foreach(DataRow rowYear in ds.Tables ["Year"].Rows )
{
nodeYear=new TreeNode ();
nodeYear.Text=rowYear["day_year"].ToString ();
nodeName.Nodes.Add(nodeYear);
//****加入当前人年份内月份记录
cmMonth=new SqlDataAdapter("select distinct day_month from rqb_day where day_year='"+nodeYear.Text+"' and day_emp_name='"+nodeName.Text+"'",cnn);
cmMonth.Fill(ds,"Month");
foreach(DataRow rowMonth in ds.Tables ["Month"].Rows )
{
nodeMonth=new TreeNode ();
nodeMonth.Text =rowMonth["day_month"].ToString ();
nodeYear.Nodes.Add (nodeMonth);
//****加入当前人年份内月份内日期记录
cmYear=new SqlDataAdapter("select distinct day_day from rqb_day where day_year='"+nodeYear.Text+"' and day_emp_name='"+nodeName.Text+"' and day_month='"+nodeMonth.Text+"' ",cnn);
cmYear.Fill(ds,"Day");
foreach(DataRow rowDay in ds.Tables ["Day"].Rows )
{
nodeDay=new TreeNode ();
nodeDay.Text =rowDay["day_day"].ToString ();
nodeMonth.Nodes.Add (nodeDay);
} ds.Tables["Day"].Clear();
} ds.Tables["Month"].Clear(); }
ds.Tables["Year"].Clear();
//
// }
}