zoukankan      html  css  js  c++  java
  • DataGridView 的导入和导出到XML 类

    using System;
    using System.IO;
    using System.Collections.Generic;
    using System.Text;
    using System.Data;
    using System.Drawing;
    using System.Windows.Forms;

    namespace SerialDebug
    {
    /// <summary>
    /// 标题:将 DataGridView 导出到 Excel 或 Xml 通用类
    /// Edit by WL 20110404
    /// 描述:导出时可以指定需要导出的 DataGridViewColumn 及自定义导出后的列名 edit from http://blog.yotuo.net/
    /// </summary>
    class ExportHelper
    {

    #region " DataGridViewToXml "

    public void DataGridViewToXml(DataGridView dataGridView, String filePath)
    {
    DataGridViewToXml(new DataGridViewExportOptions(dataGridView), filePath);
    }

    public void DataGridViewToXml(DataGridViewExportOptions dataGridViewExportOption, String filePath)
    {
    DataGridViewToXml(new List<DataGridViewExportOptions>(new DataGridViewExportOptions[] { dataGridViewExportOption }), filePath);
    }

    public void DataGridViewToXml(List<DataGridViewExportOptions> dataGridViewExportOptions, String filePath)
    {
    if (dataGridViewExportOptions == null || dataGridViewExportOptions.Count == 0) return;

    DataSet dataSet = new DataSet();

    int sheetIndex = 1;
    List<String> sheetNames = new List<String>();
    try
    {
    foreach (DataGridViewExportOptions option in dataGridViewExportOptions)
    {
    #region " 处理在多个 DataGridView 设置为相同的表名称的问题 "
    if (sheetNames.Contains(option.WorkSheetName))
    {
    int i = 1;
    while (true)
    {
    string newSheetName = option.WorkSheetName + i.ToString();
    if (!sheetNames.Contains(newSheetName))
    {
    sheetNames.Add(newSheetName);
    option.WorkSheetName = newSheetName;
    break;
    }
    i++;
    }
    }
    else
    {
    sheetNames.Add(option.WorkSheetName);
    }
    DataGridViewFillToDataSet(dataSet, option);
    sheetIndex++;
    #endregion
    }
    ExportToXml(dataSet, filePath);
    }
    finally
    {
    dataSet.Dispose();
    GC.Collect();
    }
    }

    // 处理 DataGridView 中的数据以填充到指定的 DataSet 中
    private void DataGridViewFillToDataSet(DataSet dataSet, DataGridViewExportOptions Option)
    {
    DataTable Table = new DataTable();
    Table.TableName = Option.WorkSheetName;

    if (Option.DataGridView == null) return;

    #region " 填充表头内容 "

    foreach (DataColumnExportOptions option in Option.VisibleColumnOptions)
    {
    if (!option.Visible) continue;
    Table.Columns.Add(new DataColumn(option.ColumnName));
    }

    #endregion

    #region " 填充表格正文内容 "

    foreach (DataGridViewRow dataRow in Option.DataGridView.Rows)
    {
    if (dataRow.IsNewRow) continue;

    DataRow Row = Table.NewRow();
    foreach (DataColumnExportOptions option in Option.VisibleColumnOptions)
    {
    if (dataRow.Cells[option.ColumnName].Value == null)
    {
    Row[option.ColumnName] = "";
    }
    else
    {
    Row[option.ColumnName] = dataRow.Cells[option.ColumnName].Value.ToString();
    }
    }
    Table.Rows.Add(Row);
    }

    #endregion
    dataSet.Tables.Add(Table);
    }

    #endregion

    #region " ExportToXml "
    /// <summary>
    /// 保存 DataSet 数据到 Xml 文件
    /// </summary>
    /// <param name="dataSet">DataSet数据对象</param>
    /// <param name="filePath">Xml 文件地址</param>
    private void ExportToXml(DataSet dataSet, String filePath)
    {
    #region " 判断文件是否存在,存在则删除原有文件 "
    try
    {
    if (File.Exists(filePath)) File.Delete(filePath);
    }
    catch
    {
    return;
    }
    #endregion

    dataSet.WriteXml(filePath);
    }
    #endregion

    #region ImportXML
    public void Xml2DataGridView(DataGridView dataGridView, String filePath)
    {
    System.Data.DataSet dataSet1=new System.Data.DataSet();;
    dataGridView.Rows.Clear();
    dataSet1.ReadXml(filePath, XmlReadMode.Auto);

    DataTable dt = dataSet1.Tables[0];
    dataGridView.Rows.Add(dt.Rows.Count);
    for (int i = 0; i < dt.Rows.Count; i++)
    {
    object[] data = dt.Rows[i].ItemArray;
    for (int j = 0; j < data.Length; j++)
    {
    dataGridView[j, i].Value = data[j];
    }
    }
    }
    #endregion


    }


    #region " DataColumnExportOptions "
    /// <summary>
    /// 导出数据字段属性选项类
    /// </summary>
    class DataColumnExportOptions
    {
    private String _ColumnName;
    private String _Caption;
    private Boolean _Visible;
    /// <summary>
    /// 字段名称
    /// </summary>
    public String ColumnName
    {
    get { return _ColumnName; }
    set { _ColumnName = value; }
    }
    /// <summary>
    /// 字段标题
    /// </summary>
    public String Caption
    {
    get { return _Caption; }
    set { _Caption = value; }
    }
    /// <summary>
    /// 是否显示(导出)
    /// </summary>
    public Boolean Visible
    {
    get { return _Visible; }
    set { _Visible = value; }
    }
    /// <summary>
    /// 构造函数
    /// </summary>
    /// <param name="fColumnName">字段名称</param>
    public DataColumnExportOptions(String columnName)
    : this(columnName, columnName)
    {

    }
    /// <summary>
    /// 构造函数
    /// </summary>
    /// <param name="fColumnName">字段名称</param>
    /// <param name="fCaption">字段标题</param>
    public DataColumnExportOptions(String columnName, String caption)
    : this(columnName, caption, true)
    {

    }
    /// <summary>
    /// 构造函数
    /// </summary>
    /// <param name="fColumnName">字段名称</param>
    /// <param name="fCaption">字段标题</param>
    /// <param name="fVisible">是否显示(导出)</param>
    public DataColumnExportOptions(String columnName, String caption, Boolean visible)
    {
    this._ColumnName = columnName;
    this._Caption = caption;
    this._Visible = visible;
    }
    }
    #endregion

    #region " DataGridViewExportOptions “

    class DataGridViewExportOptions
    {
    private DataGridView _DataGridView;
    private List<DataColumnExportOptions> _ColumnOptions;
    private List<DataColumnExportOptions> _VisibleColumnOptions;
    private String _WorkSheetName;

    /// <summary>
    /// 要导出到DataGridView对象
    /// </summary>
    public DataGridView DataGridView
    {
    get { return _DataGridView; }
    set { _DataGridView = value; }
    }
    /// <summary>
    /// 导出的字段属性列表
    /// </summary>
    public List<DataColumnExportOptions> ColumnOptions
    {
    get { return _ColumnOptions; }
    set { _ColumnOptions = value; }
    }
    /// <summary>
    /// 要导出的字段列表(只读)
    /// </summary>
    public List<DataColumnExportOptions> VisibleColumnOptions
    {
    get { return _VisibleColumnOptions; }
    }
    /// <summary>
    /// 导出的工作表名称
    /// </summary>
    public String WorkSheetName
    {
    get { return _WorkSheetName; }
    set { _WorkSheetName = value; }
    }
    /// <summary>
    /// 构造函数
    /// </summary>
    /// <param name="dataGridView">要导出到DataGridView对象</param>
    public DataGridViewExportOptions(DataGridView dataGridView)
    : this(dataGridView, null)
    { }
    /// <summary>
    /// 构造函数
    /// </summary>
    /// <param name="dataGridView">要导出到DataGridView对象</param>
    /// <param name="columnOptions">导出的字段属性列表</param>
    public DataGridViewExportOptions(DataGridView dataGridView, List<DataColumnExportOptions> columnOptions)
    : this(dataGridView, columnOptions, null) { }
    /// <summary>
    /// 构造函数
    /// </summary>
    /// <param name="dataGridView">要导出到DataGridView对象</param>
    /// <param name="columnOptions">导出的字段属性列表</param>
    /// <param name="workSheetName">导出生成的工作表名称</param>
    public DataGridViewExportOptions(DataGridView dataGridView, List<DataColumnExportOptions> columnOptions, String workSheetName)
    {
    if (dataGridView == null) return;

    this._DataGridView = dataGridView;
    if (columnOptions == null)
    {
    this._ColumnOptions = new List<DataColumnExportOptions>();
    foreach (DataGridViewColumn dataColumn in dataGridView.Columns)
    this._ColumnOptions.Add(new DataColumnExportOptions(dataColumn.Name, dataColumn.HeaderText, dataColumn.Visible));
    }
    else
    {
    this._ColumnOptions = columnOptions;
    }

    if (String.IsNullOrEmpty(workSheetName))
    this._WorkSheetName = dataGridView.Name;
    else
    this._WorkSheetName = workSheetName;

    this._VisibleColumnOptions = new List<DataColumnExportOptions>();
    foreach (DataColumnExportOptions option in this._ColumnOptions)
    {
    if (option.Visible)
    this._VisibleColumnOptions.Add(option);
    }
    }
    }

    #endregion






    }
        
    作者:wanglei_wan
        
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Android(java)学习笔记68:使用proguard混淆android代码
    SGU 194 Reactor Cooling
    关于流量有上下界的网络流问题的求解
    关于最小割的求解方法
    HDU 5311 Hidden String
    POJ 3548 Restoring the digits
    POJ 2062 HDU 1528 ZOJ 2223 Card Game Cheater
    ZOJ 1967 POJ 2570 Fiber Network
    HDU 1969 Pie
    HDU 1956 POJ 1637 Sightseeing tour
  • 原文地址:https://www.cnblogs.com/because/p/2378761.html
Copyright © 2011-2022 走看看