请附上详细的表设计和代码注释!!!能帮我解决问题的我给满分!!!!
解决方案 »
- c# winfrom 应用程序怎么连接本地firebird 2.5 数据库
- C# Byte[] 转struct时候遭遇exception
- sqldataadapter.update(databale)更新不了数据库
- 能不能在应用程序的解决方案里为用户控件生成dll?
- 有关在DataGrid中使用DropDownlist的问题,各位高手帮帮忙--很急用的,多谢了
- 各位大虾帮帮忙啊。急用。跪求]异常信息:System.NullReferenceException: 未将对象引用设置到对象的实例
- 冰天雪地跪地祈求答案~
- 关于 C# WebForm 里的一个问题,请帮忙解答!谢谢了先
- ToolTip的使用
- 请教一个数据库联接的问题
- sql注入
- 提问,这题考的什么?C#
private void CreatTree()
{
if(......)
{
CreatTree();
}
}
/// 绑定TreeView控件
/// </summary>
/// <param name="tree">要绑定的控件ID</param>
/// <param name="table">数据表</param>
/// <param name="ValueField">id字段</param>
/// <param name="PValueField">父级ID字段</param>
/// <param name="TextField">显示文本字段</param>
/// <param name="PID">绑定的数据最高级ID</param>
/// <returns>TreeView</returns>
public static TreeView getTreeView(TreeView tree, DataTable table, string ValueField, string PValueField, string TextField, int PID)
{
tree.Nodes.Clear();
DataView dv = new DataView(table);
dv.RowFilter = ValueField + "=" + PID;
if (dv.Count == 0)
{
dv.RowFilter = PValueField + "=" + PID;
}
for (int i = 0; i < dv.Count; i++)
{
TreeNode Node = new TreeNode();
Node.Value = dv[i][ValueField].ToString().Trim();
Node.Text = dv[i][TextField].ToString();
bangdingtree(table, ValueField, PValueField, TextField, Node);
tree.Nodes.Add(Node);
}
return tree;
} private static void bangdingtree(DataTable table, string ValueField, string PValueField, string TextField, TreeNode PNode)
{
DataView dv = new DataView(table);
dv.RowFilter = PValueField + "=" + PNode.Value.ToString();
for (int i = 0; i < dv.Count; i++)
{
TreeNode Node = new TreeNode();
Node.Value = dv[i][ValueField].ToString().Trim();
Node.Text = dv[i][TextField].ToString();
bangdingtree(table, ValueField, PValueField, TextField, Node);
PNode.ChildNodes.Add(Node); }
}
{
public partial class _Default : System.Web.UI.Page
{
string StrConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + HttpContext.Current.Server.MapPath("~/") + "b.mdb";
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
LoadData();
}
} private void LoadData()
{ OleDbConnection cn = new OleDbConnection(StrConn);
cn.Open();
OleDbCommand cmd = new OleDbCommand("select * from D where DID=PID", cn);
OleDbDataReader read = cmd.ExecuteReader();
while (read.Read())
{
MyTreeView.Nodes.Clear();
TreeNode part = new TreeNode();
part.Expanded = true;
part.Text = read["DName"].ToString();
part.Value = read["DId"].ToString();
MyTreeView.Nodes.Add(part);
FillFolderNode(read["DId"].ToString(), part);
}
read.Close();
cn.Close(); } private void FillFolderNode(string p, TreeNode part)
{
OleDbConnection cn = new OleDbConnection(StrConn);
cn.Open();
OleDbCommand cmd = new OleDbCommand("select * from D where PID=" + p + " and DID<>PID", cn);
OleDbDataReader read = cmd.ExecuteReader();
while (read.Read())
{ TreeNode parts = new TreeNode();
parts.Expanded = false;
parts.Text = read["DName"].ToString();
parts.Value = read["DId"].ToString();
part.ChildNodes.Add(parts);
FillFolderNode1(read["DId"].ToString(), parts); }
read.Close();
cn.Close();
} private void FillFolderNode1(string p, TreeNode part)
{
OleDbConnection cn = new OleDbConnection(StrConn);
cn.Open();
OleDbCommand cmd = new OleDbCommand("select * from D where DID=" + p + " and DID<>PID", cn);
OleDbDataReader read = cmd.ExecuteReader();
while (read.Read())
{ TreeNode parts = new TreeNode();
parts.Expanded = false;
parts.Text = read["DName"].ToString();
parts.Value = read["DId"].ToString();
part.ChildNodes.Add(parts); }
read.Close();
cn.Close();
} protected void MyTreeView_TreeNodeExpanded(object sender, TreeNodeEventArgs e)
{
string id = e.Node.Value;
TreeNode subnode = e.Node;
subnode.ChildNodes.Clear();//删除以前的,然后才可向下添加两级
FillFolderNode(id, subnode);
} protected void MyTreeView_SelectedNodeChanged(object sender, EventArgs e)
{
string id = MyTreeView.SelectedNode.Value;
MyTreeView.SelectedNode.Expanded = true;
TreeNode subnode = MyTreeView.SelectedNode;//当前节点
subnode.ChildNodes.Clear();//删除以前的,然后才可向下添加两级
FillFolderNode(id, subnode); Response.Write("<script>window.open('t.aspx?id=" + id + "');</script>");
}
}
}
{ DataRow[] drs = dt.Select("quanxianid='" + quanxianid+ "'and Cid= " + 0);// 选出所有子节点
TreeView1.Nodes.Clear(); // 清空树
foreach (DataRow r in drs)
{
string nodeid = r["id"].ToString();
string text = r["mingcheng"].ToString();
string parentid = r["Cid"].ToString();
string url = r["Url"].ToString();
string imageurl = r["ImageUrl"].ToString();
string framename = TargetFrame;
this.TreeView1.Font.Name = "宋体";
this.TreeView1.Font.Size = FontUnit.Parse("9"); TreeNode rootnode = new TreeNode();
rootnode.Text = text;
rootnode.Value = nodeid;
rootnode.NavigateUrl = url;
rootnode.Target = framename;
rootnode.Expanded = menuExpand;
rootnode.ImageUrl = imageurl;
rootnode.SelectAction = TreeNodeSelectAction.Expand;//和ASP.NET1.1中TREEVIEW的SelectExpands属性等效 TreeView1.Nodes.Add(rootnode);
int sonparentid = int.Parse(nodeid);
CreateNode(framename, sonparentid, rootnode, dt, aa);
} } //邦定任意节点
public void CreateNode(string TargetFrame, int parentid, TreeNode parentnode, DataTable dt, string aa)
{
DataRow[] drs = dt.Select("quanxianid='" + quanxianid+ "' and Cid= " + parentid);//选出所有子节点
foreach (DataRow r in drs)
{
string nodeid = r["id"].ToString();
string text = r["mingcheng"].ToString();
string url = r["Url"].ToString();
string imageurl = r["ImageUrl"].ToString();
string framename = TargetFrame; TreeNode node = new TreeNode();
node.Text = text;
node.Value = nodeid;
node.NavigateUrl = url;
node.Target = TargetFrame;
node.ImageUrl = imageurl;
node.SelectAction = TreeNodeSelectAction.Expand; //和ASP.NET1.1中TREEVIEW的SelectExpands属性等效
int sonparentid = int.Parse(nodeid);
if (parentnode == null)
{
TreeView1.Nodes.Clear();
parentnode = new TreeNode();
TreeView1.Nodes.Add(parentnode);
}
parentnode.ChildNodes.Add(node);
CreateNode(framename, sonparentid, node, dt, aa);
} }
树结构在点击展开时才加载点击节点的子节点
private DataSet inputTreeData;
private string _selectedNodeValue = "";
private string _selectedNodeValueCode = ""; public string selectedNodeValue
{
get { return _selectedNodeValue; }
//set { selectedNodeValue = value; }
}
public string selectedNodeValueCode
{
get { return _selectedNodeValueCode; }
//set { selectedNodeValueCode = value; }
} //构造函数重构
public treeChooseWindow(DataSet input)
{
InitializeComponent();
inputTreeData = input;
treeCreat(input);
this.StartPosition = FormStartPosition.CenterParent;
} //创建树结构
private void treeCreat(DataSet inputTreeData)
{
try
{
DataTable table = inputTreeData.Tables[0];
if (table.Columns.Count == 2)
for (int i = 0; i < table.Rows.Count; i++)
{
DataRow row = table.Rows[i];
codeTree.Nodes.Add(row[0].ToString(), row[1].ToString());
}
else
for (int i = 0; i < table.Rows.Count; i++)
{
DataRow row = table.Rows[i];
if (row[2].ToString() == "" || row[2].ToString() == row[0].ToString())//如果没有上级节点直接添加,有上级节点需要在点击时才添加
codeTree.Nodes.Add(row[0].ToString(), row[1].ToString());
}
}
catch (Exception ee)
{
MessageBox.Show("传入的数据结构与要求的结构不符合,或包含不存在的上级节点");
}
} private void codeTree_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
codeTree.SelectedNode.Collapse();
codeTree.SelectedNode = e.Node;
if (codeTree.SelectedNode.Nodes.Count == 0)
{
try
{
DataTable table = inputTreeData.Tables[0];
if (table.Columns.Count == 2)
return;
else
{
for (int i = 0; i < table.Rows.Count; i++)
{
DataRow row = table.Rows[i];
if (row[2].ToString() == codeTree.SelectedNode.Name)
codeTree.SelectedNode.Nodes.Add(row[0].ToString(), row[1].ToString());
}
}
}
catch (Exception ee)
{
MessageBox.Show("传入的数据结构与要求的结构不符合,或包含不存在的上级节点");
}
}
codeTree.SelectedNode.Expand();
}
数据结构挺简单的就是MenuItem, MenuItem.DropDownItems。
你要向上的话,就是MenuItem,ParentMenuItem.
存储在表中就是ID,ParentID,NodeContent。 //用递归的方法取得菜单项上的所有项在TreeView控件上以Node方式显示,并且Clone他们的Name作为唯一标识
//tmpMenuItems为设计生成的菜单数据,每一个winApp包含菜单的程序都会有这个数据放在窗体组件的位置,与BindDataSource等一样。
//parentNode是父结点
public TreeNode addMenuItemToTreeView(ToolStripItemCollection tmpMenuItems, TreeNode parentNode)
{ foreach (ToolStripItem tmpItem in tmpMenuItems)
{ ToolStripMenuItem tmpMenu;
if (tmpItem.GetType().ToString() == "System.Windows.Forms.ToolStripSeparator")
{
continue;
}
else
{
tmpMenu = (ToolStripMenuItem)tmpItem;
}
//过滤掉分隔符号
if (tmpMenu.Text == "-")
{
continue;
}
if (tmpMenu.DropDownItems.Count > 0)
{ //树干作为parent给下一层
TreeNode curNode = new TreeNode(tmpMenu.Text);
ToolStripMenuItem tt = (ToolStripMenuItem)tmpMenu;
curNode.Name = tmpItem.Name;
curNode.Tag = tt.Text; //curNode.Tag = tmpMenu.OwnerItem.ToString();
//递归调用
parentNode.Nodes.Add(addMenuItemToTreeView(tmpMenu.DropDownItems, curNode)); }
else
{ //树叶子返回
TreeNode lastNode = new TreeNode(tmpMenu.Text);
lastNode.Name = tmpMenu.Name;
//if(tmpMenu.is)
//{
ToolStripMenuItem tt = (ToolStripMenuItem)tmpMenu.OwnerItem;
lastNode.Tag = tt.Text;
//}
parentNode.Nodes.Add(lastNode);
}
}
return parentNode; }