格式化数据表的列(值)

时间:2014-03-11 09:57:48

标签: c#

是否可以在运行时格式化数据表列值?

我正在尝试在DateTime列中显示日期,如下所示

foreach (DataColumn c in ds.Tables[0].Columns)
{
    if (c.DataType == typeof(DateTime))
    {
        string.Format("MM/dd/yyyy", c);
    }
}

但随着时间的推移得到完整的日期..

编辑:

直到现在,我都是这个,...

 foreach (DataRow dr in ds.Tables[0].Rows)
     {
     foreach (DataColumn dc in ds.Tables[0].Columns)
        {
         if (dc.DataType == typeof(DateTime))
            {
             if (!String.IsNullOrEmpty(Convert.ToString(dr[dc])))
              {
               //string s = dr[dc].ToString();
               //dr[dc] = s.Substring(0, s.IndexOf(' '));
               //dr[dc] = Convert.ToDateTime(dr[dc]).ToShortDateString();
               dr[dc] = Convert.ToDateTime(dr[dc]).ToString("MM/dd/yyyy");
              }
             }
         }
       }

仍然无法获得所需的结果

1 个答案:

答案 0 :(得分:2)

得到了如下解决方案,..

                    DataTable dtCloned = ds.Tables[0].Clone();
                    foreach (DataColumn c in ds.Tables[0].Columns)
                    {
                        if (c.DataType == typeof(DateTime))
                        {
                            dtCloned.Columns[c.ColumnName].DataType = typeof(string);
                            colNames.Add(c.ColumnName);
                        }
                    }
                    foreach (DataRow row in ds.Tables[0].Rows)
                    {
                        dtCloned.ImportRow(row);
                    }

                    foreach (DataRow dr in dtCloned.Rows)
                    {
                        foreach (DataColumn dc in dtCloned.Columns)
                        {
                            if (colNames.Contains(dc.ColumnName))
                            {
                                string dt = Convert.ToString(dr[dc]);
                                if (!String.IsNullOrEmpty(dt))
                                {
                                    DateTime date = DateTime.ParseExact(dt.Substring(0, dt.IndexOf(' ')), "M/d/yyyy", System.Globalization.CultureInfo.InvariantCulture);
                                    dr[dc] = date.ToString("MM/dd/yyyy");
                                }
                            }
                        }
                    }