数据导出和TreeView

一、数据导出:
将数据库的数据导出成Excel工作表或是Word文档
实际上是将一个泛型集合导出出去
(1)添加控件
saveFileDialog
(2)数据成表格的形式输出出去
<table></table> 拼成html里面的table表格结构,拼成一个字符串,导出出去

(3)字符串拼接效率低,消耗内存大
StringBuilder ss = new StringBuilder();//实例化
ss.Append();//添加

(4)导出数据时开线程节省时间,防止程序假死;进度条显示进度。

代码:


          List<Product1> list=null;
             int a = 0;

       private void button1_Click(object sender, EventArgs e)
        {
            //一个按钮要可以让用户选择导出的文件格式
            saveFileDialog1.Filter = "Excel工作表|*.xlsx|Word文档|*.doc";
            //名字按照时间自动生成
            saveFileDialog1.FileName = DateTime.Now.Year + "" + DateTime.Now.Month + "月数据";
            DialogResult dr = saveFileDialog1.ShowDialog(); //获取一个用户要保存的路径
            if (dr == DialogResult.OK)
            {
                StreamWriter sw = new StreamWriter(saveFileDialog1.FileName);//输出流                
                {
                    Thread th = new Thread(NewMethod);//实例化线程
                    th.IsBackground = true;
                    th.Start(sw);//开线程                   
                }
            }
        }
       //导出数据的函数
        private void NewMethod(object sw)
        {
            StreamWriter sww = (StreamWriter)sw;
            StringBuilder ss = new StringBuilder();//实例化StringBuilder类
            ss.Append("<table border="1">");//边框
            //表头
            ss.Append("<tr><td>序号</td><td>用户名</td><td>密码</td><td>昵称</td><td>性别</td><td>年龄</td><td>生日</td><td>民族</td></tr>");
            b = list.Count();//集合的个数
            progressBar1.Maximum = b;//滚动条的最大值是集合的个数
            foreach (Product1 u in list)
                {
                    ss.Append("<tr>");
                    ss.Append("<td>" + u.ProductId + "</td>");
                    ss.Append("<td>" + u.ProductName + "</td>");
                    ss.Append("<td>" + u.ProductCategory + "</td>");
                    ss.Append("<td>" + u.ProductUnit + "</td>");
                    ss.Append("<td>" + u.ProductArea + "</td>");
                    ss.Append("<td>" + u.ProductDate + "</td>");
                    ss.Append("<td>" + u.ProductLif + "</td>");
                    ss.Append("</tr>");
                    a++;//每循环一次a加1
                    if (a <= b)//a<b时滚动条变化
                    {
                        progressBar1.Value = a;
                    }
                    else { break; }
                }
                a = 0;
                ss.Append("</table>");
                sww.Write(ss);
                sww.Close();
        }

二、TreeView
Treeview用于显示按照树形结构进行组织的数据。
Expanded属性表明是否所有的子项都全部展开(包括子项的子项),为True表示全部展开。

     private void button1_Click(object sender, EventArgs e)
        {
            List<ChinaStates> list1 = new ChinaData().Select();//一次性查找出数据库中的所有数据
            TreeNode tn = new TreeNode("中国");
            tn.Tag = "0001";//记录这个节点的编号
            treeView1.Nodes.Add(tn);
            TreeViewBind(tn, list1);//调用函数

        }
        //递归调用自身
        private static void TreeViewBind(TreeNode tn, List<ChinaStates> list)
        {
            foreach (ChinaStates c in list)
            {
                if (c.ParentAreaCode == tn.Tag.ToString())
                {
                    TreeNode tnn = new TreeNode(c.AreaName);
                    tnn.Tag = c.AreaCode;
                    tn.Nodes.Add(tnn);
                    TreeViewBind(tnn, list);
                }
            }
        }
原文地址:https://www.cnblogs.com/zhang-dandan-1/p/5951722.html