【问题标题】:Converting datetime object to date only format in asp.net datatable在 asp.net 数据表中将日期时间对象转换为仅日期格式
【发布时间】:2023-03-27 01:25:02
【问题描述】:

我试图在 asp.net gridview 中显示一个 SQL 服务器表。 SQL server 数据库中有很多表,用户选择一个表,该表应显示在 gridview 中。对于 sql server 表中的所有日期时间列,我只需要显示日期。

我使用 SQLDataReader 读取数据并将数据加载到数据表中。如果单元格是日期类型,那么我正在尝试将其转换为仅日期格式,如下图所示。

我厌倦了使用 date.toString("MM/dd/yyyy") 转换日期,但无法在数据表中对其进行编辑。图像中的变量 a 显示了整个日期和时间。任何人都可以帮助进行所需的更改,以便仅在日期列中显示日期。

我最初尝试将变量 b 值推送到数据表但无法成功,然后我尝试再次将其转换为日期并尝试。没有任何改变:(

编辑:这是代码

for (int i =0; i<table.Rows.Count;i++)
{
    DataRow row = table.Rows[i];                                         
    for (int j = 0; j < table.Columns.Count; j++)
    {
        string t = table.Rows[i][j].GetType().ToString();
        if (table.Rows[i][j].GetType().Equals(typeof(DateTime)))
        {
            mydate = DateTime.Parse(table.Rows[i][j].ToString());
            var b = mydate.Month + "/" + mydate.Day + "/" + mydate.Year;
            var c = DateTime.Parse(b.ToString());
            var d = c.ToString("MM/dd/yyyy");
            table.Rows[i].SetField(j, c.ToString("MM/dd/yyyy"));
            var a = table.Rows[i][j];
        }
    }                        
}

【问题讨论】:

  • 请考虑添加Minimal, complete and verifiable example,以便我们能够重现您的问题并为您提供帮助。不要发布代码的图像,请发布代码本身。
  • @gillduck 用户选择不同的表。有些可能有日期列,有些可能没有。所以我不能选择使用列名。
  • @Stormhashe,我把图片贴出来让大家调试后可以看到数值。
  • 您是否尝试设置列格式 - 类似于 - table.Columns["colname"].DefaultCellStyle.Format = "your format"

标签: c# asp.net datetime datatable


【解决方案1】:

您似乎正在处理后端代码中的 UI 问题。这应该在 UI 端解决,而不会影响您的实际数据。您可以通过将格式应用于绑定的列或模板来完成此操作:

<asp:BoundField DataField="PurchaseDate" HeaderText="Purchase Date" DataFormatString="{0:MM/dd/yyyy}" />

<asp:TemplateField HeaderText ="Purchase Date" >
   <ItemTemplate >
   <asp:Label ID="lblDate" runat="server" 
              Text='<%# Eval("PurchaseDate", "{0:MM/dd/yyyy}") %>' />
    </ItemTemplate>
</asp:TemplateField>

编辑:

@DineshInavolu 为什么不试试 rowdatabound 事件和 TryParse?

void OrderGridView_RowDataBound(Object sender, GridViewRowEventArgs e)
{        
    if(e.Row.RowType == DataControlRowType.DataRow)
    {
        DateTime? dateValue = null;
        if(!DateTime.TryParse(e.Row.Cells[1].Text, out dateValue))
            e.Row.Cells[1].Text = dateValue.Value.ToString("MM/dd/yyyy");        
    }
}

【讨论】:

  • 我不知道表的列名。用户将从单选按钮列表中选择一个表名,该表应显示在网格视图中。如果该列是日期类型,那么我应该采取行动。
  • @DineshInavolu 在这种情况下,您仍应在 UI 中处理此问题,例如在 gridview 数据绑定事件中
  • 我无法找到单元格中存在的数据的数据类型。那里的所有内容都显示为字符串类型。
  • @DineshInavolu 查看编辑。我希望这有助于解释 gridview rowdatabound 事件的一种方法。
  • 效果很好。我遇到了一个新问题。我有另一列用于持续时间,它在 SQL Server 中属于时间类型。甚至它也被转换并显示为当前日期。
猜你喜欢
  • 2017-03-08
  • 2017-01-08
  • 1970-01-01
  • 2016-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-24
相关资源
最近更新 更多