zoukankan      html  css  js  c++  java
  • 一个DataSet的工具类,可以将DataTime的Time部分去掉,主要在序列化Xml时有用.

    源代码下载:DataOnlyDataTable.rar

     

    public class Entity

        {

            [XmlElement]

            public int Id { get; set; }

            [XmlElement]

            public String Name { get; set; }

            [XmlElement(Type=typeof(DateTime?), IsNullable=true)]

            public DateTime? Age { get; set; }

     

            [XmlElement(DataType="date", IsNullable=false)]

            public DateTime CreateOn { get; set; }

        }

     

        [XmlRoot]

        public class MasterX

        {

            [XmlElement("Row")]

            public List<Entity> Entites { get; set; }

        }  

     

        class Program

        {

            static void Main(string[] args)

            {         

                DataSet ds = new DataSet();

                ds.ReadXmlSchema("Obj.xsd");

                ds.ReadXml("Obj.xml");

     

                Console.Write(ds.GetXml());

                Console.WriteLine();

     

                DataSet ds2 = DataSetUtil.RemoveTime(ds);

                Console.Write(ds2.GetXml());

                Console.WriteLine();

     

                DataSet ds3 = DataSetUtil.RemoveTime(ds, new String[]{"CreateOn"});

                Console.Write(ds3.GetXml());

     

                Console.WriteLine();           

                Console.Write(ds.RemoveTime().GetXml());

     

                Console.Read();

            }

        }

     

        public static class DataSetExtension

        {

            public static DataSet RemoveTime(this DataSet sourceDataSet)

            {

                return DataSetUtil.RemoveTime(sourceDataSet);

            }

     

            public static DataSet RemoveTime(this DataSet sourceDataSet, string[] dateTimeColumns)

            {

                return DataSetUtil.RemoveTime(sourceDataSet);

            }

        }

     

        public sealed class DataSetUtil

        {

            /// <summary>

            /// Remove time from source DataSet and return a new DataSet

            /// </summary>

            /// <param name="sourceDataSet"></param>

            /// <returns></returns>

            public static DataSet RemoveTime(DataSet sourceDataSet)

            {

                return RemoveTime(sourceDataSet, null);

            }

     

            /// <summary>

            /// Remove time from specified columns in source DataSet and return a new DataSet

            /// </summary>

            /// <param name="sourceDataSet"></param>

            /// <returns></returns>

            public static DataSet RemoveTime(DataSet sourceDataSet, string[] dateTimeColumns)

            {

                if (sourceDataSet == null)

                {

                    throw new ArgumentNullException("sourceDataSet");

                }

                if (sourceDataSet.Tables.Count == 0)

                {

                    throw new ArgumentNullException("Source DataSet contains no DataTable.");

                }

                DataSet result = sourceDataSet.Clone();

     

                //Remove all old columns from data table

                while (result.Tables[0].Columns.Count > 0)

                {

                    result.Tables[0].Columns.RemoveAt(0);

                }

     

                for (int i = 0; i < sourceDataSet.Tables[0].Columns.Count; i++)

                {

                    DataColumn col = sourceDataSet.Tables[0].Columns[i];

                    if (CheckIfRemoveTime(col, dateTimeColumns))

                    {

                            result.Tables[0].Columns.Add(col.ColumnName, typeof(String));                                          

                    }

                    else

                    {

                        result.Tables[0].Columns.Add(col.ColumnName, col.DataType, col.Expression);

                    }

                }

                for (int i = 0; i < sourceDataSet.Tables[0].Rows.Count; i++)

                {

                    DataRow row = result.Tables[0].NewRow();

                    for (int k = 0; k < sourceDataSet.Tables[0].Columns.Count; k++)

                    {

                        if (sourceDataSet.Tables[0].Columns[k].DataType == typeof(DateTime))

                        {

                            row[k] = ((DateTime)sourceDataSet.Tables[0].Rows[i][k]).ToString("yyyy-MM-dd");

                        }

                        else

                        {

                            row[k] = sourceDataSet.Tables[0].Rows[i][k];

                        }

     

                    }

                    result.Tables[0].Rows.Add(row);

     

                }

     

                return result;

            }

     

            private static bool CheckIfRemoveTime(DataColumn column, string[] dateTimeColumns)

            {

                if (column.DataType != typeof(DateTime))

                {

                    return false;

                } 

                if (dateTimeColumns == null)

                {

                    return true;

                }

     

                return dateTimeColumns.Contains(column.ColumnName);           

            }

        }

  • 相关阅读:
    linux centos7环境下安装apache2.4+php5.6+mysql5.6 安装及踩坑集锦(二)
    linux centos7环境下安装apache2.4+php5.6+mysql5.6 安装及踩坑集锦
    C# 获取当前登录IP
    清除ios系统alert弹出框的域名
    在线文档预览示例
    lnmp1.5一键安装包安装lnmpa后,添加站点
    解决sql server2008数据库安装之后,web程序80端口被占用问题(终极方案)
    码云上传项目流程
    SQLServer2008不允许保存更改错误解决办法
    tp5 使用phpword 替换word模板并利用com组件转换pdf
  • 原文地址:https://www.cnblogs.com/rockniu/p/1520169.html
Copyright © 2011-2022 走看看