using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.IO; namespace 资料管理器
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{
//加载类别到TreeView
LoadCategoryToTree(treeView1.Nodes, GetCategoriesByParentId(-)); //设置TreeView中节点单击的时候显示右键菜单 AddMouseClickShowContentMenu();
} private void AddMouseClickShowContentMenu()
{
//遍历TreeView的每个节点
SearchNode(treeView1.Nodes);
} private void SearchNode(TreeNodeCollection treeNodeCollection)
{
foreach (TreeNode item in treeNodeCollection)
{
if (item.Level == )
{
item.ContextMenuStrip = contextMenuStrip1;
}
SearchNode(item.Nodes);
}
} //递归加载类别信息到TreeView
private void LoadCategoryToTree(TreeNodeCollection treeNodeCollection, List<Category> list)
{
foreach (Category item in list)
{
//把当前节点加到treeNodeCollection集合中
TreeNode tnode = treeNodeCollection.Add(item.TName); //把当前类别的Id记录到Tag中。
tnode.Tag = item.TId;
//List<Category> listSub = GetCategoriesByParentId(item.TId);
//if (listSub.Count == 0)
//{
// tnode.ContextMenuStrip = contextMenuStrip1;
//}
LoadCategoryToTree(tnode.Nodes, GetCategoriesByParentId(item.TId));
}
} private List<Category> GetCategoriesByParentId(int pid)
{
List<Category> list = new List<Category>();
string sql = "select tid,tname from Category where tParentId=@pid";
using (SqlDataReader reader = SqlHelper.ExecuteReader(sql, new SqlParameter("@pid", pid)))
{
if (reader.HasRows)
{
while (reader.Read())
{
Category model = new Category();
model.TId = reader.GetInt32();
model.TName = reader.GetString();
list.Add(model);
}
}
}
return list;
} private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
if (e.Node != null)
{
LoadTitleToListBox(e.Node); }
} private void LoadTitleToListBox(TreeNode node)
{ //获取当前节点对应的类别id
int categoryId = (int)node.Tag;
//从文章表中查询dtid为categoryId的所有文章
List<ContentInfo> list = GetContentByCategoryId(categoryId);
listBox1.Items.Clear();
//遍历list集合将文章信息加到Listbox中
foreach (var item in list)
{
listBox1.Items.Add(item);
}
} private List<ContentInfo> GetContentByCategoryId(int categoryId)
{
List<ContentInfo> list = new List<ContentInfo>();
//select did,dname from ContentInfo where dtid=@categoryId
using (SqlDataReader reader = SqlHelper.ExecuteReader("select did,dname from ContentInfo where dtid=@categoryId", new SqlParameter("@categoryId", categoryId)))
{
if (reader.HasRows)
{
while (reader.Read())
{
ContentInfo model = new ContentInfo();
model.DId = reader.GetInt32();
model.DName = reader.GetString();
list.Add(model);
}
}
} return list; } private void listBox1_MouseClick(object sender, MouseEventArgs e)
{ } private void listBox1_MouseDoubleClick(object sender, MouseEventArgs e)
{
//ListBox的鼠标双击事件
// e.
if (listBox1.SelectedItem != null)
{
//获取选中项中的文章的Id
ContentInfo article = listBox1.SelectedItem as ContentInfo;
int id = article.DId;
textBox1.Text = GetContentInfoByContentId(id);
}
} //根据文章Id获取文章内容
private string GetContentInfoByContentId(int id)
{
//string sql = "select dcontent from ContentInfo where did=@id";
//using (SqlDataReader reader = SqlHelper.ExecuteReader(sql, new SqlParameter("@id", id)))
//{
// if (reader.HasRows)
// {
// if (reader.Read())
// {
// return reader.GetString(0);
// }
// }
//}
//return string.Empty;
string sql = "select dcontent from ContentInfo where did=@id";
return SqlHelper.ExecuteScalar(sql, new SqlParameter("@id", id)).ToString();
} private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
treeView1.SelectedNode = e.Node;
} private void 导入文章ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (treeView1.SelectedNode != null)
{
//获取当前选中类别的categoryId
int categoryId = (int)treeView1.SelectedNode.Tag;
openFileDialog1.Multiselect = false;
openFileDialog1.Filter = "txt files (*.txt)|*.txt";
openFileDialog1.FileName = string.Empty;
//导入文章
//1.弹出一个选择路径的一个对话框
DialogResult result = openFileDialog1.ShowDialog(); if (result == System.Windows.Forms.DialogResult.OK)
{
//获取用户选择的文件的路径
string path = openFileDialog1.FileName;
string title = Path.GetFileNameWithoutExtension(path);
string content = File.ReadAllText(path, System.Text.Encoding.Default);
//执行insert语句将该文章导入到数据库中
string sql = "insert into ContentInfo(dtid,dname,dcontent) values(@categoryId,@title,@content)";
SqlParameter[] pms = new SqlParameter[] {
new SqlParameter("@categoryId",categoryId),
new SqlParameter("@title",title),
new SqlParameter("@content",content)
};
//直接执行插入语句
SqlHelper.ExecuteNonQuery(sql, pms);
} //重新加载ListBox
LoadTitleToListBox(treeView1.SelectedNode);
} }
}
}

使用TreeView+ListBox+TxtBox 资料管理器的更多相关文章

  1. 第20课-数据库开发及ado.net 可空值类型,资料管理器,多条件查询,Case

    第20课-数据库开发及ado.net 可空值类型,资料管理器,多条件查询,Case SqlHelper using System; using System.Collections.Generic; ...

  2. 【基础巩固】文件流读写、大文件移动 FileStream StreamWriter File Path Directory/ ,m资料管理器(递归)

    C#获取文件名 扩展名 string fullPath = @"d:\test\default.avi"; string filename = Path.GetFileName(f ...

  3. Duilib源码分析(四)绘制管理器—CPaintManagerUI—(前期准备三)

    接下来,我们将继续分析UIlib.h文件中其他的文件, UIContainer.h, UIRender.h, WinImplBase.h, UIManager.h,以及其他布局.控件等: 1. UIR ...

  4. 5、Java Swing布局管理器(FlowLayout、BorderLayout、CardLayout、BoxLayout、GirdBagLayout 和 GirdLayout)

    5.Java-Swing常用布局管理器       应用布局管理器都属于相对布局,各组件位置可随界面大小而相应改变,不变的只是其相对位置,布局管理器比较难以控制,一般只在界面大小需要改是才用,但即使这 ...

  5. 工控随笔_08_西门子_Win10安装Step7.V5.6中文版授权管理器不能正常启动

    随着Windows系统的不断升级,西门子工控软件也不断升级,但是有时候在安装西门子 软件的时候会出现授权管理器不能正常启动的情况. 图  Step7 因为自动许可证管理器不能正常打开 如上图所示,报S ...

  6. Clipboard Action for Mac(智能剪贴板历史管理器)破解版安装

    1.软件简介    Clipboard Action 是 macOS 系统上一款智能剪贴板历史管理器,它允许剪贴板历史中的每一段内容执行操作.使用 AppleScript 或 Automator 工作 ...

  7. Java-Swing常用布局管理器

    http://www.cnblogs.com/hthuang/p/3460234.html   5.Java-Swing常用布局管理器       应用布局管理器都属于相对布局,各组件位置可随界面大小 ...

  8. ERROR [IM002] [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序

    在用c#生成应用程序的时候,读写dbf时,open方法出错 ERROR [IM002] [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序 以前这个程序是用着好 ...

  9. Atitit.木马病毒的操作注册表原理 系统服务管理器 atiSysService

    Atitit.木马病毒的操作注册表原理 系统服务管理器 atiSysService 1. atiSysService1 2. atiSysService  原理1 3. Java code1 4. 参 ...

随机推荐

  1. hdu 2553 N皇后问题 (经典DFS)

    题目链接:点击链接 思路:用一维数组hang[num] = i,num表示第num行,i表示第i列,计算n = 1~10皇后的不同放置数量,然后打表 #include<stdio.h> # ...

  2. UVa784 Maze Exploration

    // 题意:输入一个迷宫,从*开始遍历,把可达点标记为字符# 注意迷宫边界不规则,要用strlen判断. #include<cstdio> #include<cstring> ...

  3. iOS Foundation 框架概述文档:常量、数据类型、框架、函数、公布声明

    iOS Foundation 框架概述文档:常量.数据类型.框架.函数.公布声明 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业 ...

  4. IOS Note - Core NS Data Types

    NSString (Immutable)NSMutableString (rarely used)NSNumberNSValueNSData (bits)NSDateNSArray (Immutabl ...

  5. ResultSet转成java类对象

    在做web开发时遇到一个事情: 需要从mysql数据表中查询数据并遍历查询结果 这样最简单的方式是:查询到结果根据表中字段列表的顺序来一个个获取字段,但这样需要记住字段的顺序,操作起来不是那么方便.因 ...

  6. JavaScript与Flash的通信

    当Flash置于HTML容器中时,经常会遇到AS与JS的通信问题,例如:JS能否调用AS中的变量.方法,AS能否调用JS中的变量.方法等等.答案是肯定的.随着技术的不断发展,解决方案也是多种多样的. ...

  7. 使用python selenium进行自动化functional test

    Why Automation Testing 现在似乎大家都一致认同一个项目应该有足够多的测试来保证功能的正常运作,而且这些此处的‘测试’特指自动化测试:并且大多数人会认为如果还有哪个项目依然采用人工 ...

  8. C++:构造函数和析构函数能否为虚函数

    原文:http://blog.csdn.net/xhz1234/article/details/6510568 C++:构造函数和析构函数能否为虚函数? 简单回答是:构造函数不能为虚函数,而析构函数可 ...

  9. PHP做好防盗链的基本思想 防盗链的设置方法

    盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率.受益者不提供资源或提供 ...

  10. TortoiseGit安装教程

    TortoiseGit 是Windows下的可视化Git界面. 下载Git 网站地址: http://code.google.com/p/tortoisegit/ 安装前必须装上msysgit才能在W ...