DataTable:对于 Db 中的日期字段,在 UI 上仅显示日期而不是日期时间

DataTable: In case of Date field in Db, show only date indead of datetime on UI

我在 asp.net core(3.1) 网站中创建了一个页面。在页面上,用户必须指定数据库连接,然后指定 'table name'(指定数据库中存在的任何 table)。同一页面还包含 预览 按钮。 单击 'Preview' 按钮后,我需要转到数据库并获取前 100 行并显示在页面的预览部分。

我们正在使用 ado.net 来获取数据,并且会像

这样的数据 table
public static DataTable GetTableData(int displayCount, string tableName, string connectionString)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
    SqlCommand command = new SqlCommand();
    command.Connection = connection;
    command.CommandType = CommandType.Text;
    command.CommandText = string.Format("SELECT top(@DisplayCount)* FROM {0}", tableName);

    command.Parameters.AddWithValue("@DisplayCount", displayCount);

    SqlDataAdapter sqlAdapter = new SqlDataAdapter(command);
    DataSet ds = new DataSet();

    sqlAdapter.Fill(ds);

    if (ds.Tables.Count > 0)
      {
        return ds.Tables[0];
      }
    }
return null;
}

在模型中,我有 属性 'PreviewDataTable'。 现在在页面上,我正在显示这样的数据。

 <table class="table mb-0">
     <thead>
        <tr>
             @foreach (DataColumn col in Model.PreviewDataTable.Columns)
             {
                 <th scope="col">@col.ColumnName</th>
             }
        </tr>
    </thead>
    <tbody>
        @foreach (DataRow row in Model.PreviewDataTable.Rows)
            {
                <tr>
                   @foreach (DataColumn col in Model.PreviewDataTable.Columns)
                   {
                      <td>@row[col.ColumnName]</td>
                   }
               </tr>
            }
   </tbody>
  </table>

问题: 如果我有一个包含 2 列的 table,一列是日期,另一列是日期时间。如下图

1

在预览部分显示如下。

在预览部分,'c_date' 列虽然是日期,但也显示了时间和日期。 如何仅在日期字段中显示日期?

附加信息:

在调试时(如果我们尝试使用反射),我了解到对于日期字段 (C_Date),DataTable 中的数据类型是 'DateTime'。请检查下图。

更新 18/08/2020

SQL Server Data Type Mappings我们可以看到DateSQL会自动转换为DateTime。所以你需要用新的格式转换或以新的格式显示。

Show Date without using ColumnName

显示值代码

              <td>
                @{
                    DateTime dtDate;

                    if (DateTime.TryParse(@row[col.ColumnName].ToString(), out dtDate))
                    {
                        bool isTimeNull = (dtDate.TimeOfDay == TimeSpan.Zero);

                        if (isTimeNull)
                        {
                            @Convert.ToDateTime(row[col.ColumnName]).ToString("yyyy/MM/dd");
                        }
                        else
                            @row[col.ColumnName];
                    }
                    else
                        @row[col.ColumnName];
                }
            </td>



How can I show date only in case of a date field?

@Convert.ToDateTime(行[col.ColumnName]).ToString("yyyy/MM/dd");



测试截图:

视图中 table 的代码:

<tbody>
        @foreach (DataRow row in Model.PreviewDataTable.Rows)
        {
        <tr>
            @foreach (DataColumn col in Model.PreviewDataTable.Columns)
            {
            <td>
                @if (col.ColumnName.Equals("C_Date"))
                {
                    @Convert.ToDateTime(row[col.ColumnName]).ToString("yyyy/MM/dd");
                }
                else
                {
                    @row[col.ColumnName];
                }

            </td>
            }
        </tr>
        }
    </tbody>