1、new 一个窗体,然后设置窗体属性。
2、添加数据展示控件,显示数据。
3、添加按钮控件,调用导出Excel代码,实现导出Excel功能。
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using DevExpress.Utils;
using DevExpress.XtraEditors;
using DevExpress.XtraGrid;
using DevExpress.XtraGrid.Views.Grid;
using DevExpress.XtraTab;
using SynData.MsBox; namespace SynData
{
public class DevHelper
{
#region =======================================弹出消息框=========================================
/// <summary>
/// 弹出消息框,大消息
/// </summary>
/// <param name="title">显示标题</param>
/// <param name="msg">弹出消息框</param>
/// <returns></returns>F:\MyBak\Web_Code\数据通同步\SynData\MsBox\MsMBox.cs
public static void MesBox(string title)
{
MsMBox f = new MsMBox(title, );
f.Show();
} /// <summary>
/// 弹出消息框,大消息
/// </summary>
/// <param name="title">显示标题</param>
/// <param name="msg">弹出消息框</param>
/// <returns></returns>F:\MyBak\Web_Code\数据通同步\SynData\MsBox\MsDialogResult.cs
public static void MsDialogResult(string msg)
{
MsDialogResult f = new MsDialogResult(msg, true);
f.ShowDialog();
} /// <summary>
/// 弹出消息框,大消息
/// </summary>
/// <param name="title">显示标题</param>
/// <param name="msg">弹出消息框</param>
/// <returns></returns>F:\MyBak\Web_Code\数据通同步\SynData\MsBox\MsDialogResult.cs
public static void MsDialogResult(string msg, bool bl)
{
MsDialogResult f = new MsDialogResult(msg, bl);
f.ShowDialog();
}
#endregion
#region ========================================GridLookUpEdit 数据显示========================================
/// <summary>
/// GridLookUpEdit 数据显示
/// </summary>
/// <param name="gridLookUpEdit">GridLookUpEdit</param>
/// <param name="sql">sql 语句</param>
/// <param name="displaymember">绑定Text显示的字段源名称</param>
/// <param name="valuemember">绑定Value字段源名称</param>
/// <param name="ConnectionStringLocalTransaction">连接字符串</param>
public static void GetApiisid(GridLookUpEdit gridLookUpEdit, string sql, string displaymember, string valuemember, string ConnectionStringLocalTransaction)
{
DataTable dt = SQlHelper.GetDataTable(ConnectionStringLocalTransaction,
sql
).Tables[];
gridLookUpEdit.Properties.View.OptionsBehavior.AutoPopulateColumns = false;
gridLookUpEdit.Properties.DataSource = dt; //数据源
gridLookUpEdit.Properties.DisplayMember = displaymember; //绑定Text显示的字段源名称
gridLookUpEdit.Properties.ValueMember = valuemember; //绑定Value字段源名称
gridLookUpEdit.Properties.NullText = null;
gridLookUpEdit.Properties.AllowNullInput = DevExpress.Utils.DefaultBoolean.True;
gridLookUpEdit.Properties.View.BestFitColumns();
gridLookUpEdit.Properties.View.OptionsView.ShowAutoFilterRow = true; //显示不显示grid上第一个空行,也是用于检索的应用
}
#endregion
#region ===========================================GridContrl表格样式设计,可以导出数据。========================================
/// <summary>
/// 表格样式设计,可以导出数据。
/// </summary>
/// <param name="GCOrderItem">GridControl</param>
/// <param name="TableName">表名</param>
/// <param name="istype">是否依类型显示数据</param>
/// <param name="constr">数据库连接字符串</param>
public static void GetSetGridContrl(GridControl GCOrderItem, string TableName, string istype, string constr)
{
GridView gridView1 = (GridView)GCOrderItem.MainView;
gridView1.IndicatorWidth = ;
gridView1.OptionsView.ShowAutoFilterRow = true;
gridView1.OptionsView.ColumnAutoWidth = false;
//自动列宽,会出现横向滚动条
gridView1.OptionsView.ColumnAutoWidth = false;
//自动列宽
gridView1.BestFitColumns();
StringBuilder sb = new StringBuilder();
sb.Append("SELECT ");
sb.Append(" TableName,TableReMark,FileNames,FileReMark,LONG ,type2,LONG2 ");
sb.Append("FROM dbo.Lan_TableField ");
sb.Append("WHERE TableName = '" + TableName + "' order by SortNo ");
DataTable dt = SQlHelper.GetDataTable(constr, sb.ToString()).Tables[];
for (int i = ; i < dt.Rows.Count; i++)
{
string filename = dt.Rows[i]["FileNames"].ToString().Trim();
string rem = dt.Rows[i]["FileReMark"].ToString().Trim();
string FILETYPE = dt.Rows[i]["type2"].ToString().Trim().ToUpper();
int LONG = Convert.ToInt32(dt.Rows[i]["LONG2"].ToString().Trim());
DevExpress.XtraGrid.Columns.GridColumn Col1 = new DevExpress.XtraGrid.Columns.GridColumn();
Col1.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Near;
if (istype == "依类型")
{
if (FILETYPE == "时间")
{
Col1.DisplayFormat.FormatType = FormatType.DateTime;
Col1.DisplayFormat.FormatString = "yyyy-MM-dd HH:mm:ss";
}
if (FILETYPE == "数值")
{
Col1.DisplayFormat.FormatType = FormatType.Numeric;
}
}
Col1.Width = LONG;
if (LONG < )
{
Col1.Width = ;
}
Col1.Tag = filename + " ; " + rem;
Col1.Name = filename;
Col1.FieldName = filename;
Col1.Caption = rem;
Col1.VisibleIndex = i;
gridView1.Columns.Add(Col1);
}
gridView1.OptionsView.ShowGroupPanel = false;
gridView1.Appearance.OddRow.BackColor = Color.PaleGoldenrod; // 设置奇数行颜色 // 默认也是白色 可以省略
gridView1.OptionsView.EnableAppearanceOddRow = true; // 使能 // 和和上面绑定 同时使用有效
gridView1.Appearance.EvenRow.BackColor = Color.WhiteSmoke; // 设置偶数行颜色
gridView1.OptionsView.EnableAppearanceEvenRow = true; // 使能 // 和和上面绑定 同时使用有效
gridView1.CustomDrawRowIndicator += gridView1_CustomDrawRowIndicator;
}
#endregion
#region ================================================弹出导出Excel窗体方法================================================ /// <summary>
/// 将 DataRow[] 集合显示到表中
/// </summary>
/// <param name="Mdr"></param>
public static void ExprlDataRow(DataRow[] Mdr)
{
if (Mdr != null)
{
DataTable newdt = new DataTable();
try
{
DataTable DTtemp = Mdr[].Table;
newdt = DTtemp.Clone();
for (int i = ; i < Mdr.Length; i++)
{
newdt.ImportRow((DataRow)Mdr[i]);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
ExprlDataTable(newdt);
}
}
/// <summary>
/// 将 DataRow 显示到表中
/// </summary>
/// <param name="Mdr"></param>
public static void ExprlDataRow(DataRow Mdr)
{
if (Mdr != null)
{
DataTable newdt = new DataTable();
try
{
DataTable DTtemp = Mdr.Table;
newdt = DTtemp.Clone();
newdt.ImportRow((DataRow)Mdr);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
ExprlDataTable(newdt);
}
}
/// <summary>
/// 弹出异常消息框,可导出数异常数据
/// </summary>
/// <param name="TableName">异常数据表名</param>
/// <param name="dt">异常消息表</param>
/// <param name="fText">弹出框显示文本</param>
/// <param name="con">连接字符串</param>
public static void ExprlDataTable(DataTable dt)
{
/*------------------------------创建窗体-------------------------------------*/
Form f = GetSetFrom();
/*------------------------------创建Panel容器-------------------------------------*/
Panel pl = (Panel)(f.Controls.Find("FPL", true)[]);
/*------------------------------------数据展示----------------------------------------*/
if (dt != null)
{
/*------------------------------ 添加选卡控件-------------------------------------*/
XtraTabControl tab = new XtraTabControl();
tab.Name = "XTC";
pl.Controls.Add(tab);
tab.Dock = System.Windows.Forms.DockStyle.Fill; /*------------------------------ 创建选卡-------------------------------------*/
XtraTabPage xtra = new XtraTabPage();
xtra.Name = dt.TableName;//设置选卡name
xtra.Text = dt.TableName;//设置选卡显示文本
/*------------------------------ 创建数据展示控件GridControl------------------*/
DevExpress.XtraGrid.GridControl GCOrderItem = CreateGCOrderItem(dt);
xtra.Controls.Add(GCOrderItem);
tab.TabPages.Add(xtra); f.Show();
}
} /// <summary>
/// 弹出异常消息框,可导出数异常数据
/// </summary>
/// <param name="TableName">异常数据表名</param>
/// <param name="dt">异常消息表</param>
/// <param name="fText">弹出框显示文本</param>
/// <param name="con">连接字符串</param>
public static void ExprlDataSet(DataSet ds)
{
/*------------------------------创建窗体-------------------------------------*/
Form f = GetSetFrom();
/*------------------------------创建Panel容器-------------------------------------*/
Panel pl = (Panel)(f.Controls.Find("FPL", true)[]);
/*------------------------------------数据展示----------------------------------------*/
if (ds != null)
{
/*------------------------------ 添加选卡控件-------------------------------------*/
XtraTabControl tab = new XtraTabControl();
tab.Name = "XTC";
pl.Controls.Add(tab);
tab.Dock = System.Windows.Forms.DockStyle.Fill;
for (int t = ; t < ds.Tables.Count; t++)
{
DataTable dt = ds.Tables[t];
/*------------------------------ 创建选卡-------------------------------------*/
XtraTabPage xtra = new XtraTabPage();
xtra.Name = dt.TableName;//设置选卡name
xtra.Text = dt.TableName;//设置选卡显示文本
/*------------------------------ 创建数据展示控件GridControl------------------*/
DevExpress.XtraGrid.GridControl GCOrderItem = CreateGCOrderItem(dt);
xtra.Controls.Add(GCOrderItem);
tab.TabPages.Add(xtra);
}
f.Show();
}
}
/// <summary>
/// 弹出异常消息框,可导出数异常数据
/// </summary>
/// <param name="TableName">异常数据表名</param>
/// <param name="dt">异常消息表</param>
/// <param name="fText">弹出框显示文本</param>
/// <param name="con">连接字符串</param>
public static void ExprlDictionary(Dictionary<string, DataTable> Dic)
{
/*------------------------------创建窗体-------------------------------------*/
Form f = GetSetFrom();
/*------------------------------创建Panel容器-------------------------------------*/
Panel pl = (Panel)(f.Controls.Find("FPL", true)[]);
/*------------------------------------数据展示----------------------------------------*/
if (Dic != null)
{
/*------------------------------ 添加选卡控件-------------------------------------*/
XtraTabControl tab = new XtraTabControl();
tab.Name = "XTC";
pl.Controls.Add(tab);
tab.Dock = System.Windows.Forms.DockStyle.Fill;
foreach (KeyValuePair<string, DataTable> item2 in Dic)
{
DataTable dt = item2.Value;
/*------------------------------ 创建选卡-------------------------------------*/
XtraTabPage xtra = new XtraTabPage();
xtra.Name = dt.TableName;//设置选卡name
xtra.Text = dt.TableName;//设置选卡显示文本
/*------------------------------ 创建数据展示控件GridControl------------------*/
DevExpress.XtraGrid.GridControl GCOrderItem = CreateGCOrderItem(dt);
xtra.Controls.Add(GCOrderItem);
tab.TabPages.Add(xtra);
}
f.Show();
}
}
/// <summary>
/// 弹出异常消息框,可导出数异常数据
/// </summary>
/// <param name="TableName">异常数据表名</param>
/// <param name="dt">异常消息表</param>
/// <param name="fText">弹出框显示文本</param>
/// <param name="con">连接字符串</param>
public static void ExprlList(List<DataTable> Dic)
{
/*------------------------------创建窗体-------------------------------------*/
Form f = GetSetFrom();
/*------------------------------创建Panel容器-------------------------------------*/
Panel pl = (Panel)(f.Controls.Find("FPL", true)[]);
/*------------------------------------数据展示----------------------------------------*/
if (Dic != null)
{
/*------------------------------ 添加选卡控件-------------------------------------*/
XtraTabControl tab = new XtraTabControl();
tab.Name = "XTC";
pl.Controls.Add(tab);
tab.Dock = System.Windows.Forms.DockStyle.Fill;
foreach (DataTable item2 in Dic)
{
/*------------------------------ 创建选卡-------------------------------------*/
XtraTabPage xtra = new XtraTabPage();
xtra.Name = item2.TableName;//设置选卡name
xtra.Text = item2.TableName;//设置选卡显示文本
/*------------------------------ 创建数据展示控件GridControl------------------*/
DevExpress.XtraGrid.GridControl GCOrderItem = CreateGCOrderItem(item2);
xtra.Controls.Add(GCOrderItem);
tab.TabPages.Add(xtra);
}
f.Show();
}
} /// <summary>
/// 创建From 以及Panel
/// </summary>
/// <returns></returns>
public static Form GetSetFrom()
{
/*------------------------------创建窗体-------------------------------------*/
Form f = new Form();
f.Text = "数据展示";//dt2.Rows[0]["TableReMark"].ToString();//显示窗体名称
f.StartPosition = FormStartPosition.CenterScreen;
f.Size = new System.Drawing.Size(, );
f.FormClosing += f_FormClosing;
/*-----------------------------创建导出按钮--------------------------------------*/
Label LbtnExcel = new Label();
LbtnExcel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
LbtnExcel.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)()))), ((int)(((byte)()))), ((int)(((byte)()))));
LbtnExcel.Image = global::SynData.Properties.Resources.get_mail_24px_33246_easyicon_net;
LbtnExcel.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
LbtnExcel.Location = new System.Drawing.Point(, );
LbtnExcel.Name = "label14";
LbtnExcel.Size = new System.Drawing.Size(, );
LbtnExcel.TabIndex = ;
LbtnExcel.Text = "导出Excel";
LbtnExcel.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)()));
LbtnExcel.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
LbtnExcel.Click += new System.EventHandler(BtnExprl_Click);
LbtnExcel.MouseEnter += new System.EventHandler(label_MouseEnter);//鼠标移到控件上时手型鼠标
LbtnExcel.MouseLeave += new System.EventHandler(label_MouseLeave);//鼠标移到控件上时手型鼠标
LbtnExcel.Anchor = ((System.Windows.Forms.AnchorStyles)(System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)); //窗体添加按钮
f.Controls.Add(LbtnExcel);
/*------------------------------创建Panel容器-------------------------------------*/
Panel pl = new Panel();
pl.Location = new System.Drawing.Point(, );
pl.Size = new System.Drawing.Size(, );
f.Controls.Add(pl);
//上下左右靠拢
pl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
pl.Name = "FPL"; return f; }
/// <summary>
/// 返回绑定好数据的 GridControl
/// </summary>
/// <param name="dt">绑定的数据</param>
/// <returns></returns>
public static GridControl CreateGCOrderItem(DataTable dt )
{
/*------------------------------ 创建数据展示控件GridControl------------------*/
GridView gridView1 = new GridView();
DevExpress.XtraGrid.GridControl GCOrderItem = new DevExpress.XtraGrid.GridControl();
GCOrderItem.Dock = System.Windows.Forms.DockStyle.Fill;
GCOrderItem.MainView = gridView1;
GCOrderItem.Name = "GC" + dt.TableName;//设置GridControl名称
GCOrderItem.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] { gridView1 });
gridView1.GridControl = GCOrderItem;
gridView1.Name = "gV" + dt.TableName;//设置gridView1名称
gridView1.OptionsBehavior.Editable = false;
gridView1.OptionsBehavior.EditorShowMode = DevExpress.Utils.EditorShowMode.Click;
gridView1.OptionsView.ShowGroupPanel = false;
gridView1.IndicatorWidth = ;
gridView1.OptionsView.ShowAutoFilterRow = true;
gridView1.OptionsView.ColumnAutoWidth = false;//自动列宽,会出现横向滚动条
//自动列宽
gridView1.BestFitColumns();
if (dt.Rows.Count > )
{
for (int i = ; i < dt.Columns.Count; i++)
{
//控件添加列
DevExpress.XtraGrid.Columns.GridColumn Col1 = new DevExpress.XtraGrid.Columns.GridColumn();
if (dt.Columns[i].DataType.ToString() =="System.DateTime")
{
Col1.DisplayFormat.FormatType = FormatType.DateTime;
Col1.DisplayFormat.FormatString = "yyyy-MM-dd HH:mm:ss";
}
Col1.Name = dt.Columns[i].Caption.ToString();// 控件列名
Col1.FieldName = dt.Columns[i].Caption.ToString();// 列数据源字段名
Col1.Caption = dt.Columns[i].Caption.ToString();// 列标题
Col1.VisibleIndex = i;
Col1.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Near;
//Col1.DisplayFormat.FormatType = dt.Columns[i].DataType;
gridView1.Columns.Add(Col1);
}
}
gridView1.Appearance.OddRow.BackColor = Color.PaleGoldenrod; // 设置奇数行颜色 // 默认也是白色 可以省略
gridView1.OptionsView.EnableAppearanceOddRow = true; // 使能 // 和和上面绑定 同时使用有效
gridView1.Appearance.EvenRow.BackColor = Color.WhiteSmoke; // 设置偶数行颜色
gridView1.OptionsView.EnableAppearanceEvenRow = true; // 使能 // 和和上面绑定 同时使用有效
/* 自动添加 行索引 以及 模糊查询设置*/
gridView1.CustomDrawRowIndicator += new DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventHandler(gridView1_CustomDrawRowIndicator);
GCOrderItem.DataSource = dt;//数据源绑定
return GCOrderItem;
}
/// <summary>
/// 弹出异常消息框,可导出数异常数据
/// </summary>
/// <param name="TableName">异常数据表名</param>
/// <param name="dt">异常消息表</param>
/// <param name="fText">弹出框显示文本</param>
/// <param name="con">连接字符串</param>
public static void GetSetGridContrl(string TableName, DataTable dt, string con)
{
StringBuilder sb = new StringBuilder();
sb.Append("SELECT ");
sb.Append(" TableName,TableReMark,FileNames,FileReMark,LONG ,type2,LONG2 ");
sb.Append("FROM dbo.Lan_TableField ");
sb.Append("WHERE TableName = '" + TableName + "' order by SortNo ");
DataTable dt2 = SQlHelper.GetDataTable(con, sb.ToString()).Tables[];
Form f = new Form();
f.StartPosition = FormStartPosition.CenterScreen;
f.Size = new System.Drawing.Size(, );
//f.Text = fText;
f.FormClosing += f_FormClosing;
GridView gridView1 = new GridView();
DevExpress.XtraGrid.GridControl GCOrderItem = new DevExpress.XtraGrid.GridControl();
GCOrderItem.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
Button btn = new Button();
btn.Text = "导出Excel";
btn.Click += btn_Click;
btn.Location = new System.Drawing.Point(, );
btn.Anchor = ((System.Windows.Forms.AnchorStyles)
(System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)
);
btn.Size = new System.Drawing.Size(, );
f.Controls.Add(btn); Label lb = new Label();
lb.Name = "lbExcel";
lb.Location = new System.Drawing.Point(, );
lb.Visible = false;
lb.ForeColor = Color.Red;
lb.Font = new System.Drawing.Font("微软雅黑", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)()));
GCOrderItem.Cursor = System.Windows.Forms.Cursors.Default;
//GCOrderItem.Dock = System.Windows.Forms.DockStyle.Fill;
GCOrderItem.Location = new System.Drawing.Point(, );
GCOrderItem.MainView = gridView1;
GCOrderItem.Name = "GCOrderItem";
GCOrderItem.Size = new System.Drawing.Size(, );
GCOrderItem.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] {
gridView1}); f.Controls.Add(GCOrderItem); gridView1.GridControl = GCOrderItem;
gridView1.Name = "gridView1";
gridView1.OptionsBehavior.Editable = false;
gridView1.OptionsBehavior.EditorShowMode = DevExpress.Utils.EditorShowMode.Click;
gridView1.OptionsView.ShowGroupPanel = false; gridView1.IndicatorWidth = ;
gridView1.OptionsView.ShowAutoFilterRow = true;
gridView1.OptionsView.ColumnAutoWidth = false;
//自动列宽,会出现横向滚动条
gridView1.OptionsView.ColumnAutoWidth = false;
//自动列宽
gridView1.BestFitColumns();
if (dt2.Rows.Count > )
{
string FILETYPE = "";
for (int i = ; i < dt2.Rows.Count; i++)
{
DevExpress.XtraGrid.Columns.GridColumn Col1 = new DevExpress.XtraGrid.Columns.GridColumn();
Col1.Name = dt2.Rows[i]["FileNames"].ToString();// itm.Key;
Col1.FieldName = dt2.Rows[i]["FileNames"].ToString();// itm.Key;
Col1.Caption = dt2.Rows[i]["FileReMark"].ToString(); //itm.Value;
Col1.VisibleIndex = i;
Col1.Width = Convert.ToInt32(dt2.Rows[i]["LONG2"].ToString());
Col1.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Near;
FILETYPE = dt2.Rows[i]["type2"].ToString().Trim().ToUpper();
if (FILETYPE == "时间")
{
Col1.DisplayFormat.FormatType = FormatType.DateTime;
Col1.DisplayFormat.FormatString = "yyyy-MM-dd HH:mm:ss";
}
if (FILETYPE == "数值")
{
Col1.DisplayFormat.FormatType = FormatType.Numeric;
}
gridView1.Columns.Add(Col1);
}
f.Text = dt2.Rows[]["TableReMark"].ToString();//显示窗体名称
}
gridView1.Appearance.OddRow.BackColor = Color.PaleGoldenrod; // 设置奇数行颜色 // 默认也是白色 可以省略
gridView1.OptionsView.EnableAppearanceOddRow = true; // 使能 // 和和上面绑定 同时使用有效
gridView1.Appearance.EvenRow.BackColor = Color.WhiteSmoke; // 设置偶数行颜色
gridView1.OptionsView.EnableAppearanceEvenRow = true; // 使能 // 和和上面绑定 同时使用有效
gridView1.CustomDrawRowIndicator += new DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventHandler(gridView1_CustomDrawRowIndicator);
GCOrderItem.DataSource = dt;
f.Show();
} private static void BtnExprl_Click(object sender, EventArgs e)
{
string path = BLL_getpath();//选择路径
string path2 = path.Replace(".xls", "").Replace(".xlsx", "");
/*如果路径不存在那么创建路径*/
if (!Directory.Exists(path2))
{
Directory.CreateDirectory(path2);
}
try
{
Label btn = (Label)sender; /*获取按钮对象*/
Form f = btn.FindForm();/*获取窗体对象*/
DevExpress.XtraGrid.GridControl GCOrderItem = null;/*获取数据展示控件*/
Panel pl = (Panel)(f.Controls.Find("FPL", true)[]);
XtraTabControl tab = (XtraTabControl)pl.Controls.Find("XTC", true)[];
foreach (XtraTabPage gc in tab.TabPages)
{
foreach (Control con in gc.Controls)
{
if (con.GetType().ToString() == "DevExpress.XtraGrid.GridControl")
{
GCOrderItem = new GridControl();
GCOrderItem = (DevExpress.XtraGrid.GridControl)con;
DataTable dt = (DataTable)GCOrderItem.DataSource;
GridView dv = (GridView)GCOrderItem.MainView;
/*获取数据表*/
DataTable DT_sap = dt.Clone();
for (int i = ; i < dt.Rows.Count; i++)
{
DataRow dr = DT_sap.NewRow();
for (int j = ; j < dt.Columns.Count; j++)
{
string col = dt.Columns[j].ColumnName;
dr[col] = dt.Rows[i][col];
}
DT_sap.Rows.Add(dr);
}
/*转换中文列名*/
foreach (DevExpress.XtraGrid.Columns.GridColumn gcm in dv.Columns)
{
string name = gcm.Name;
string text = gcm.Caption;
DT_sap.Columns[name].Caption = text;
DT_sap.Columns[name].ColumnName = text;
}
Label lb = new Label();
/*快速 导出Excel方法*/
WriteExcel(DT_sap, path2 + "\\" + GCOrderItem.Name + ".xls", lb);
}
}
}
}
catch (Exception ex)
{
MsDialogResult("导出失败!\r\n" + ex.Message.ToString(), false);
}
}
/// <summary>
/// 鼠标进入控件上方时,手型鼠标,背景灰色
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public static void label_MouseEnter(object sender, EventArgs e)
{
Label lable = (Label)sender;
lable.Cursor = Cursors.Hand;
lable.BackColor = Color.Gainsboro;
}
/// <summary>
/// 鼠标离开控件时,箭头鼠标,背景恢复正常
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public static void label_MouseLeave(object sender, EventArgs e)
{
Label lable = (Label)sender;
lable.Cursor = Cursors.Default;
lable.BackColor = Control.DefaultBackColor;
}
static void f_FormClosing(object sender, FormClosingEventArgs e)
{
Form f = (Form)sender;
f.Dispose();
}
/// <summary>
/// 导出Excel
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
static void btn_Click(object sender, EventArgs e)
{
try
{
Button btn = (Button)sender;//获取按钮对象
Form f = btn.FindForm();//获取 按钮 所在的窗体
DevExpress.XtraGrid.GridControl GCOrderItem = null;
foreach (Control con in f.Controls)
{
if (con.Name == "GCOrderItem")
{
GCOrderItem = (DevExpress.XtraGrid.GridControl)con;
DataTable dt = (DataTable)GCOrderItem.DataSource;
GridView dv = (GridView)GCOrderItem.MainView; DataTable DT_sap = dt.Clone();
for (int i = ; i < dt.Rows.Count; i++)
{
DataRow dr = DT_sap.NewRow();
for (int j = ; j < dt.Columns.Count; j++)
{
string col = dt.Columns[j].ColumnName;
dr[col] = dt.Rows[i][col];
}
DT_sap.Rows.Add(dr);
}
foreach (DevExpress.XtraGrid.Columns.GridColumn gcm in dv.Columns)
{
string name = gcm.Name;
string text = gcm.Caption;
DT_sap.Columns[name].Caption = text;
DT_sap.Columns[name].ColumnName = text;
}
string path = BLL_getpath();
char[] anyOf = { '\\' };
int count = path.LastIndexOfAny(anyOf);
string filname1 = path.Substring(count + , path.Length - count - );
string Table1 = path.Substring(, count) + "\\" + filname1;
Label lb = new Label();
WriteExcel(DT_sap, Table1, lb);
}
}
MsDialogResult("导出成功!");
}
catch (Exception ex)
{
MsDialogResult(ex.Message.ToString(),false);
}
} /// <summary>
/// 自动添加 行索引 以及 模糊查询设置
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public static void gridView1_CustomDrawRowIndicator(object sender, RowIndicatorCustomDrawEventArgs e)
{
//添加行索引
if (e.Info.IsRowIndicator && e.RowHandle >= )
{
e.Info.DisplayText = (e.RowHandle + ).ToString();
}
//模糊查询时 可以不用输入“%”
foreach (DevExpress.XtraGrid.Columns.GridColumn item in ((GridView)sender).Columns)
{
item.OptionsFilter.AutoFilterCondition = DevExpress.XtraGrid.Columns.AutoFilterCondition.Contains; //筛选条件设置为包含
}
}
/// <summary>
/// 获取Excel文件保存路径
/// </summary>
/// <returns></returns>
public static string BLL_getpath()
{
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Title = "保存的excel文件";
saveFileDialog.InitialDirectory = "c:\\";
saveFileDialog.Filter = "Excel97-2003 (*.xls)|*.xls|All Files (*.*)|*.*";
saveFileDialog.ShowDialog();
string path = saveFileDialog.FileName;
if (saveFileDialog.FileName == "" || saveFileDialog.FileName == null)
{
path = "文件名不能为空!";
}
return path;
} /// <summary>
/// 快速导出Excel的方法
/// </summary>
/// <param name="dt"></param>
/// <param name="path"></param>
/// <param name="lblTip"></param>
public static void WriteExcel(DataTable dt, string path, Label lblTip)
{
try
{
lblTip.Visible = true;
string mark = lblTip.Text;
long totalCount = (long)dt.Rows.Count;
lblTip.Text = string.Concat(new object[]{lblTip.Text,"共有",totalCount, "条数据。"});
Thread.Sleep();
long rowRead = 0L;
StreamWriter sw = new StreamWriter(path, false, Encoding.GetEncoding("gb2312"));
StringBuilder sb = new StringBuilder();
for (int i = ; i < dt.Columns.Count; i++)
{
sb.Append(dt.Columns[i].ColumnName.ToString() + "\t");
}
sb.Append(Environment.NewLine);
for (int j = ; j < dt.Rows.Count; j++)
{
rowRead += 1L;
lblTip.Text = mark + "正在写入[" + ((float)(100L * rowRead) / (float)totalCount).ToString("0.00") + "%]...的数据";
Application.DoEvents();
for (int k = ; k < dt.Columns.Count; k++)
{
string xmlss;
if (dt.Rows[j][k] == null)
{
xmlss = "空";
}
else if (dt.Rows[j][k].ToString().Trim() == "")
{
xmlss = "空";
}
else
{
xmlss = dt.Rows[j][k].ToString().Replace("\n", "").Replace("\r\n", "").Replace("\t", "").Replace("\\s", "").Replace("\\n", "").Replace("\r", "").Replace("\\r", "").Replace("@", "").Replace("\\", "").Replace("/", "");
}
sb.Append(xmlss + "\t");
}
sb.Append(Environment.NewLine);
}
sw.Write(sb.ToString());
sw.Flush();
sw.Close();
lblTip.Text = "";
lblTip.Visible = false;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
#endregion
}
}
aaarticlea/png;base64,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" alt="" />
自己再学习和摸索阶段,代码写的有点乱,纯属瞎搞。