数据表:对于Db中的日期字段,在UI上仅显示datetime的日期

问题描述

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

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

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”。 现在在Page上,我正在显示这样的数据。

 <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列的表,则其中一个是日期,另一个是DateTime。像下面一样

enter image description here

1

在预览部分,它显示如下。

enter image description here

在“预览”部分,“ c_date”列还显示了时间和日期,尽管它是一个日期。 如何仅在日期字段的情况下显示日期?

其他信息:

在调试(如果我们尝试使用反射)时,我知道对于Date字段(C_Date),DataTable中的数据类型为'DateTime'。请检查下图。

enter image description here

解决方法

更新18/08/2020

SQL Server Data Type Mappings,我们可以看到Date的{​​{1}}将自动转换为SQL。因此,您需要转换为新格式或以新格式显示。

不使用 ColumnName

即可显示日期

enter image description here

显示值的代码

DateTime



如何仅在日期字段的情况下显示日期?

@ Convert.ToDateTime(row [col.ColumnName])。ToString(“ yyyy / MM / dd”);



测试屏幕截图:

enter image description here

视图中的表格代码:

              <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>