winform程序 treeview,初学。不知道如何绑定数据库。如何点击节点在datagrid中检索相应数据! 为节点添加单击事件,处理内容为:检索数据,绑定到DATAGRID。楼主是这个意思么? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 给你段VB的代码看看,C#的手头还没有。'选择某类信息:载入到列表'---------------------------------------------------------Private Sub tvwClass_Click() Dim strSql As String Dim strTemp As String Dim iState As Integer If tvwClass.SelectedItem.Key = "Root" Then Exit Sub iState = FreightStateName2Code(tvwClass.SelectedItem.Key) '构造SQL查询语句 strTemp = FormatWhere() strTemp = IIf(Len(strTemp) = 0, " Where State=" & iState, strTemp + " And State=" & iState) strSql = "Select A.FreightNo,Info,State," & _ "StartAddress,AcceptAddress,Consigner,SendTime,Motorman,MotormanTel," & _ "Consignee,AcceptTime,DistillMan,DistillTime " & _ "FROM FreightInfos as A INNER JOIN FreightStock as B " & _ "ON A.FreightNo=B.FreightNo " & strTemp Call LoadLists(strSql) '添加查找结果到列表 End Sub /// <summary> /// 选择节点后处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void TvwRefrigeratory_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e) { TreeNode ItemNode=this.TvwRefrigeratory.SelectedNode; int RefrigeratoryID; //冷库ID,库位ID string TvwString; //选中的节点字符串 TvwString=ItemNode.Text; if(e.Node.Text==sTvwRootString) //为根节点 { InitLvwView(0); } if(ItemNode.Text==sTvwRootString) { //如果选中的为根节点 } else if(ItemNode.Parent.Text==sTvwRootString) { //如果选中的为冷库 //检索DATAGRID代码 } } 这是我的代码。你可以看看#region 使用datatable填充treeview private string a_rootvalue=""; public string Tv_rootValue { get { return a_rootvalue; } set { a_rootvalue=value; } } private DataTable a_TvData=new System.Data.DataTable(); public DataTable DT_DataTable { get { return a_TvData; } set { a_TvData=value; } } private string a_key=""; public string m_key { get { return a_key; } set { a_key=value; } } private string a_relkey=""; public string m_relkey { get { return a_relkey; } set { a_relkey=value; } } private string a_keyname=""; public string m_keyname { get { return a_keyname; } set { a_keyname=value; } } public void UF_SetTvData() { if(a_rootvalue == null & a_rootvalue=="") { return; } if(this.a_TvData.Rows.Count==0) { return; } UF_InitTreeView(this.Nodes,a_rootvalue); //聚焦到树的第一个节点上 this.SelectedNode=this.Nodes[0]; this.Focus(); //折叠所有的树的节点 this.CollapseAll(); } private void UF_InitTreeView(TreeNodeCollection Nds,string parentId) { if (this.a_key=="" & this.a_key==null) return; if (this.a_keyname=="" & this.a_keyname==null) return; if (this.a_relkey=="" & this.a_relkey==null) return; //建立视图,为以后设立查询条件作准备 DataView mydataview=new DataView(); //新节点 TreeNode newNode; //新节点的父亲节点ID string newNodeFatherId; //dataview的数据源 mydataview.Table=a_TvData; //过滤条件 mydataview.RowFilter=this.a_relkey+"="+parentId; foreach(DataRowView drv in mydataview) { newNode=new TreeNode(); newNode.Tag=drv[this.a_key].ToString(); newNode.Text=drv[this.a_keyname].ToString(); Nds.Add(newNode); newNodeFatherId=drv[this.a_relkey].ToString(); //递归调用遍历当前节点的子节点 UF_InitTreeView(newNode.Nodes,newNode.Tag.ToString ()); } } #endregion 我也说一下我自己以前用过的大概思路:treeview,datagrid我在treeview中放的是商品目录,在datagrid中放的是商品信息,在treeview发生单击事件时,取得结点上的商品目录名称,再把商品表dataview.RowFilter="类别名 = '"+商品目录名称+"'",再把datagrid和商品表dataview连在一起,就可以检索选定结点类别的商品了 把商品名称做成TreeNode ,把该类别的Node加进该类别 treeView1.Nodes.Clear() ; System.Windows.Forms.TreeNode mNode=new TreeNode("全部"); //mNode.ImageIndex =1; treeView1.Nodes.Add(mNode) ; //假设DataSet 已经取得 System.Windows.Forms.TreeNode nNode=new TreeNode("在职"); System.Windows.Forms.TreeNode pNode=new TreeNode("离职"); treeView1.TopNode.Nodes.Add(nNode) ; treeView1.TopNode.Nodes.Add(pNode) ; treeView1.Select (); if (ds.Tables [0].Rows.Count <=0 ) { return; } else { // add Add some childtreenodes foreach(DataRow dr in ds.Tables [0].Rows ) { System.Windows.Forms.TreeNode aNode=new TreeNode(dr["Name"].ToString() );System.Windows.Forms.TreeNode bNode=new TreeNode(dr["Name"].ToString()); treeView1.Nodes [0].Nodes[0].Nodes .Add (aNode); treeView1.Nodes [0].Nodes[1].Nodes .Add (bNode); } }} } 正则表达式求救!!关于时间的判断 update和delete触发 自动登录和讯博客问题 C# load 和构造函数有什么区别? C# 多窗体应用程序中怎么样为子窗体设置TopMost属性? 为DataGridView添加序号,为什么提示索引超界 求以下功能用dos指令怎么写? 关于c#操作word的问题 win2000如何执行win xp下编写的C# .exe文件? 这样用Thread.sleep,好象有问题,请教! ▲▲▲兄弟们,着急,如何同步一个方法,思归兄,请进 WindowsFrom中TreeView的问题
'---------------------------------------------------------
Private Sub tvwClass_Click()
Dim strSql As String
Dim strTemp As String
Dim iState As Integer
If tvwClass.SelectedItem.Key = "Root" Then Exit Sub
iState = FreightStateName2Code(tvwClass.SelectedItem.Key)
'构造SQL查询语句
strTemp = FormatWhere()
strTemp = IIf(Len(strTemp) = 0, " Where State=" & iState, strTemp + " And State=" & iState)
strSql = "Select A.FreightNo,Info,State," & _
"StartAddress,AcceptAddress,Consigner,SendTime,Motorman,MotormanTel," & _
"Consignee,AcceptTime,DistillMan,DistillTime " & _
"FROM FreightInfos as A INNER JOIN FreightStock as B " & _
"ON A.FreightNo=B.FreightNo " & strTemp
Call LoadLists(strSql) '添加查找结果到列表
End Sub
/// <summary>
/// 选择节点后处理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void TvwRefrigeratory_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
TreeNode ItemNode=this.TvwRefrigeratory.SelectedNode;
int RefrigeratoryID; //冷库ID,库位ID
string TvwString; //选中的节点字符串 TvwString=ItemNode.Text;
if(e.Node.Text==sTvwRootString) //为根节点
{
InitLvwView(0); } if(ItemNode.Text==sTvwRootString)
{
//如果选中的为根节点
}
else if(ItemNode.Parent.Text==sTvwRootString)
{ //如果选中的为冷库
//检索DATAGRID代码 }
}
#region 使用datatable填充treeview
private string a_rootvalue="";
public string Tv_rootValue
{
get
{
return a_rootvalue;
}
set
{
a_rootvalue=value;
}
}
private DataTable a_TvData=new System.Data.DataTable();
public DataTable DT_DataTable
{
get
{
return a_TvData;
}
set
{
a_TvData=value;
}
}
private string a_key="";
public string m_key
{
get
{
return a_key;
}
set
{
a_key=value;
}
}
private string a_relkey="";
public string m_relkey
{
get
{
return a_relkey;
}
set
{
a_relkey=value;
}
}
private string a_keyname="";
public string m_keyname
{
get
{
return a_keyname;
}
set
{
a_keyname=value;
}
}
public void UF_SetTvData()
{
if(a_rootvalue == null & a_rootvalue=="")
{
return;
}
if(this.a_TvData.Rows.Count==0)
{
return;
}
UF_InitTreeView(this.Nodes,a_rootvalue);
//聚焦到树的第一个节点上
this.SelectedNode=this.Nodes[0];
this.Focus();
//折叠所有的树的节点
this.CollapseAll();
}
private void UF_InitTreeView(TreeNodeCollection Nds,string parentId)
{
if (this.a_key=="" & this.a_key==null)
return;
if (this.a_keyname=="" & this.a_keyname==null)
return;
if (this.a_relkey=="" & this.a_relkey==null)
return;
//建立视图,为以后设立查询条件作准备
DataView mydataview=new DataView();
//新节点
TreeNode newNode;
//新节点的父亲节点ID
string newNodeFatherId;
//dataview的数据源
mydataview.Table=a_TvData;
//过滤条件
mydataview.RowFilter=this.a_relkey+"="+parentId; foreach(DataRowView drv in mydataview)
{
newNode=new TreeNode();
newNode.Tag=drv[this.a_key].ToString();
newNode.Text=drv[this.a_keyname].ToString();
Nds.Add(newNode);
newNodeFatherId=drv[this.a_relkey].ToString();
//递归调用遍历当前节点的子节点
UF_InitTreeView(newNode.Nodes,newNode.Tag.ToString ());
}
}
#endregion
我在treeview中放的是商品目录,在datagrid中放的是商品信息,
在treeview发生单击事件时,取得结点上的商品目录名称,再把商品表dataview.RowFilter="类别名 = '"+商品目录名称+"'",再把datagrid和商品表dataview连在一起,就可以检索选定结点类别的商品了
System.Windows.Forms.TreeNode mNode=new TreeNode("全部");
//mNode.ImageIndex =1;
treeView1.Nodes.Add(mNode) ;
//假设DataSet 已经取得
System.Windows.Forms.TreeNode nNode=new TreeNode("在职");
System.Windows.Forms.TreeNode pNode=new TreeNode("离职");
treeView1.TopNode.Nodes.Add(nNode) ;
treeView1.TopNode.Nodes.Add(pNode) ;
treeView1.Select ();
if (ds.Tables [0].Rows.Count <=0 )
{
return;
}
else
{
// add Add some childtreenodes
foreach(DataRow dr in ds.Tables [0].Rows )
{
System.Windows.Forms.TreeNode aNode=new TreeNode(dr["Name"].ToString() );
System.Windows.Forms.TreeNode bNode=new TreeNode(dr["Name"].ToString());
treeView1.Nodes [0].Nodes[0].Nodes .Add (aNode);
treeView1.Nodes [0].Nodes[1].Nodes .Add (bNode);
}
}
}
}