Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 关于GridView和DateTime列_C#_Asp.net - Fatal编程技术网

C# 关于GridView和DateTime列

C# 关于GridView和DateTime列,c#,asp.net,C#,Asp.net,这个问题的目的是让我更好地理解到底发生了什么。似乎有不同的方法来解决这个问题,这取决于数据的输入方式 情况是,当我从存储过程中拉入数据时,很多时候都会有一些DateTime列,并且在某个时候我必须在我的网页上显示它们。现在,根据我的数据是如何进入的,我似乎必须使用不同的解决方案。这还取决于我是在标签中显示它,还是在GridView中显示它。我只想了解发生了什么,以及处理这件事的最佳方式是什么 下面是我遇到的情况,以及我为解决这个问题所做的工作(当然,在这个网站上做了一些研究之后) 情景1: 存储

这个问题的目的是让我更好地理解到底发生了什么。似乎有不同的方法来解决这个问题,这取决于数据的输入方式

情况是,当我从存储过程中拉入数据时,很多时候都会有一些DateTime列,并且在某个时候我必须在我的网页上显示它们。现在,根据我的数据是如何进入的,我似乎必须使用不同的解决方案。这还取决于我是在标签中显示它,还是在GridView中显示它。我只想了解发生了什么,以及处理这件事的最佳方式是什么

下面是我遇到的情况,以及我为解决这个问题所做的工作(当然,在这个网站上做了一些研究之后)

情景1:
存储过程中的DateTime列保存到DataTable中,然后用作AutoGenerateColumns设置为false的GridView的数据源

我的解决方案是在ascx页面上设置日期格式

<asp:TemplateField>
    <ItemTemplate>
        <asp:Label ID="lblTest1" runat="server" Text='<%# Eval("SomeDateField", "{0:MM/dd/yyyy}") %>'></asp:Label>
    </ItemTemplate>
</asp:TemplateField>
情况3:存储过程中的DataColumn被保存到DataTable中,然后在我的页面的某个标签中使用该值

我认为上面的方法也会起作用,我只是把数据改成一个较短的日期,稍后我会对此进行一些测试。但是我做了一个助手扩展方法来处理这个问题:

public static string ParseFormattedDateFromString(this string dateString, string dateFormat = "MM/dd/yyyy")
{
    string formattedDate = "";
    DateTime date;
    if(DateTime.TryParse(dateString, out date))
    {
        formattedDate = date.ToString(dateFormat);
    }
    return formattedDate;
}
只要我不处理GridView,我的第三个示例似乎工作得很好,但当我使用GridView时,该解决方案将不起作用。我想要的是一个适用于所有三种场景的解决方案

现在,仅从试验和错误来看,当设置数据源时,gridview是否会将其强制为特定的日期/时间格式?我无法理解为什么在处理自动生成列和非自动生成列时,它的工作方式似乎有所不同

我还研究了到目前为止转换这些列的解决方案,但即使我的数据在SQL Server上看起来很好,但在我运行程序时,它仍然带来了时间段

提前感谢您在理解这个问题上给予的帮助,最终我只是想成为一名程序员,并且喜欢了解后台正在发生的事情,而不是仅仅使用一个解决方案,而不知道是什么导致它工作

编辑 注释中的JaydipJ解决方案对于我正在创建一个新存储过程的情况非常有效。但是,大多数情况下,我只需要使用一个预先存在的存储过程,而无法对其进行更改。
--Joseph

如果需要一致的方法,请定义一个模型,将数据表映射到模型列表,将该列表绑定到GridView@techspider我不熟悉这种方法。我必须查一下。当你从数据库中获取数据时,为什么不只在那里格式化数据,即使用
CONVERT(VARCHAR,colName,101)
insp@JaydipJ我试图编辑我的评论,但速度不够快。我用谷歌搜索了一下,找到了数字的图表。我将尝试一下,看看会发生什么,谢谢。您还可以在BoundField中为所有datetime选项指定一定程度的格式
。如果需要一致的方法,请定义一个模型,将datatable映射到模型列表,将该列表绑定到GridView@techspider我不熟悉这种方法。我必须查一下。当你从数据库中获取数据时,为什么不只在那里格式化数据,即使用
CONVERT(VARCHAR,colName,101)
insp@JaydipJ我试图编辑我的评论,但速度不够快。我用谷歌搜索了一下,找到了数字的图表。我将尝试一下,看看会发生什么,谢谢。您还可以在BoundField中为所有datetime选项指定一定程度的
格式。
public static string ParseFormattedDateFromString(this string dateString, string dateFormat = "MM/dd/yyyy")
{
    string formattedDate = "";
    DateTime date;
    if(DateTime.TryParse(dateString, out date))
    {
        formattedDate = date.ToString(dateFormat);
    }
    return formattedDate;
}