Пример #1
0
        public void Export()
        {
            Directory.CreateDirectory(".//tmp");

            //定义目录DataTable 结构
            var dtMenus = new DataTable("<b>数据库表目录</b>");

            dtMenus.Columns.Add("序号", typeof(int));
            dtMenus.Columns.Add("表名", typeof(string));
            dtMenus.Columns.Add("表说明", typeof(string));

            //将选中项的总数 设置为进度条最大值 +1项是表目录文件
            tpbExport.Value   = 0;
            tpbExport.Maximum = ckbData.CheckedItems.Count
                                + ckbTables.CheckedItems.Count + 1;

            //获取需要导出的表结构 选中项
            List <string> lst = new List <string>();

            foreach (var item in ckbTables.CheckedItems)
            {
                lst.Add(item.ToString());
            }

            #region 导出表结构
            if (lst.Count > 0)
            {
                lblMessage.Text = "准备表结构文件...";
                //得到选中的表结构的字段信息
                var lstDt      = dal.GetTableStruct(lst);
                var pathTables = "./tmp/表结构";
                Directory.CreateDirectory(pathTables);
                var tableIndex = 1;
                foreach (var dt in lstDt)
                {
                    //得到表描述
                    var drs  = dal.GetTables().Select("表名='" + dt.TableName + "'");
                    var desp = string.Empty;
                    if (drs.Length > 0)
                    {
                        desp = drs[0]["表说明"].ToString();
                    }
                    //创建表字段信息的html
                    DbCommon.CreateHtml(dt, true, Path.Combine(pathTables, dt.TableName + "  " + desp + ".html"), true, desp);
                    //构建表目录
                    DataRow dr = dtMenus.NewRow();
                    dr["序号"]  = tableIndex++;
                    dr["表说明"] = desp;
                    dr["表名"]  = "<a href=\"表结构\\{0}  {1}.html\">{0}</a>".FormatString(dt.TableName, desp);
                    dtMenus.Rows.Add(dr);
                    //改变进度
                    tpbExport.Value++;
                }
                //导出表目录
                DbCommon.CreateHtml(dtMenus, false, "./tmp/" + defaultHtml, false);
                tpbExport.Value++;
            }
            #endregion

            #region 导出表数据
            //传递需要导出数据的table选中项  得到数据内容
            lst.Clear();
            foreach (var item in ckbData.CheckedItems)
            {
                lst.Add(item.ToString());
            }
            if (lst.Count > 0)
            {
                lblMessage.Text = "正在生成表数据数据...";
                var lstDt = dal.GetTableData(lst);
                //创建常用数据的html
                var pathTables = "./tmp/常用数据";
                Directory.CreateDirectory(pathTables);
                foreach (var dt in lstDt)
                {
                    DbCommon.CreateHtml2(dt, true, Path.Combine(pathTables, dt.TableName + ".html"));
                    tpbExport.Value++;
                }
            }
            #endregion

            try
            {
                lblMessage.Text = "正在编译CHM文件...";
                //编译CHM文档
                ChmHelp c3 = new ChmHelp();
                c3.DefaultPage = defaultHtml;
                c3.Title       = txtTitle.Text;
                c3.ChmFileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), c3.Title + ".chm");
                c3.RootPath    = @"./tmp";
                c3.Compile();
                lblMessage.Text = "导出完毕 文件存储在:" + c3.ChmFileName;
                Directory.Delete("./tmp", true);
            }
            catch (Exception ex)
            {
                lblMessage.Text = "导出发生异常";
                MessageBox.Show(ex.Message);
            }
            finally
            {
                this.EnableControl(true);
            }
        }