C# 试图在datetime中缩短时间

C# 试图在datetime中缩短时间,c#,asp.net,gridview,C#,Asp.net,Gridview,我在表格中只显示一个日期时遇到了一些问题 我在前一个问题上得到了一些帮助,但遇到了另一个问题。以下是我们添加的内容: ((BoundField)gvEmployeeReview.Columns[1]).DataFormatString = "{0:d}"; //date hired column ((BoundField)gvEmployeeReview.Columns[8]).DataFormatString = "{0:d}"; //next review column 这是aspx页面

我在表格中只显示一个日期时遇到了一些问题

我在前一个问题上得到了一些帮助,但遇到了另一个问题。以下是我们添加的内容:

((BoundField)gvEmployeeReview.Columns[1]).DataFormatString = "{0:d}"; //date hired column
((BoundField)gvEmployeeReview.Columns[8]).DataFormatString = "{0:d}"; //next review column
这是aspx页面
下面是代码隐藏页
当我运行它时,我得到:

“索引超出范围。必须为非负且小于集合的大小

参数名称:索引
描述:在执行当前web请求期间发生未经处理的异常。请查看堆栈跟踪,以了解有关错误及其在代码中起源的详细信息

异常详细信息:System.ArgumentOutOfRangeException:索引超出范围。必须为非负且小于集合的大小。
参数名称:索引“及其在此行上”第158行:((BoundField)gvEmployeeReview.Columns[1])。DataFormatString=“{0:d}”;//日期雇用列


任何试图解决这个问题的帮助都将是非常棒的。我没有任何运气

正如例外情况所说,您正在访问一个超出范围的集合的成员。可能
gvEmployeeReview.Columns[1]
不存在。
gvEmployeeReview.Columns
中有多少成员?

如异常所示,您正在访问超出范围的集合的成员。可能
gvEmployeeReview.Columns[1]
不存在。
gvEmployeeReview.Columns
中有多少成员?

这与日期格式无关。可能是在尝试访问列时出错。请注意,该列索引以零为基础。如果有
N
列,则索引范围为
0
N-1
。尝试使用索引
[0]
[7]
而不是
[1]
[8]

((BoundField)gvEmployeeReview.Columns[0]).DataFormatString = "{0:d}";
((BoundField)gvEmployeeReview.Columns[7]).DataFormatString = "{0:d}";
这将产生实际的列数

gvEmployeeReview.Columns.Count

更新

我不是网络专家;不过,我刚刚用一个
GridView
做了一个测试,我马上就得到了正确的日期格式。我使用的对象数据源如下:

  • 创建具有所需属性的类。添加一个静态方法,返回一个带有一些真实数据或示例数据的
    列表

    public class Model
    {
        public int ID { get; set; }
        public DateTime BeginDate { get; set; }
        public DateTime EndDate { get; set; }
        public string Name { get; set; }
    
        public static List<Model> GetModels()
        {
            return new List<Model> {
                new Model{ BeginDate=DateTime.Now,
                           EndDate=DateTime.Now.AddDays(1), ID=1, Name="test"},
                new Model{ BeginDate=DateTime.Now.AddDays(10),
                           EndDate=DateTime.Now.AddDays(12), ID=1, Name="test 2"}
            };
        }
    }
    
    公共类模型
    {
    公共int ID{get;set;}
    公共日期时间起始日期{get;set;}
    公共日期时间结束日期{get;set;}
    公共字符串名称{get;set;}
    公共静态列表GetModels()
    {
    返回新列表{
    新模型{BeginDate=DateTime.Now,
    EndDate=DateTime.Now.AddDays(1),ID=1,Name=“test”},
    新模型{BeginDate=DateTime.Now.AddDays(10),
    EndDate=DateTime.Now.AddDays(12),ID=1,Name=“test 2”}
    };
    }
    }
    
  • 在页面上放置一个
    GridView
    ,点击
    GridView
    右上角的小
    [>]
    打开任务窗口

  • 中选择数据源…
    选择

  • 在打开的
    数据源配置向导
    窗口中,选择
    对象
    ,然后单击
    确定
    。然后选择
    模型
    类作为业务对象,并单击
    下一步>
    。最后在
    select
    选项卡上选择
    GetModels
    ,然后单击finish

  • 在第4点的最后一步之后,将打开一个对话框窗口,其中显示问题
    “刷新“GridView1”的字段和键”
    。克利克:是的。设计器会自动为选定类的每个属性添加列,并显示一些示例数据

  • 现在,再次单击
    [>]
    并选择
    编辑列…
    。在左下角列表中选择一个日期列。您将在属性窗口的
    Data
    部分找到
    DataFormatString
    属性。您可以在这里输入
    {0:d}


  • 这与日期格式无关。可能是在尝试访问列时出错。请注意,该列索引以零为基础。如果有
    N
    列,则索引范围为
    0
    N-1
    。尝试使用索引
    [0]
    [7]
    而不是
    [1]
    [8]

    ((BoundField)gvEmployeeReview.Columns[0]).DataFormatString = "{0:d}";
    ((BoundField)gvEmployeeReview.Columns[7]).DataFormatString = "{0:d}";
    
    这将产生实际的列数

    gvEmployeeReview.Columns.Count
    

    更新

    我不是网络专家;不过,我刚刚用一个
    GridView
    做了一个测试,我马上就得到了正确的日期格式。我使用的对象数据源如下:

  • 创建具有所需属性的类。添加一个静态方法,返回一个带有一些真实数据或示例数据的
    列表

    public class Model
    {
        public int ID { get; set; }
        public DateTime BeginDate { get; set; }
        public DateTime EndDate { get; set; }
        public string Name { get; set; }
    
        public static List<Model> GetModels()
        {
            return new List<Model> {
                new Model{ BeginDate=DateTime.Now,
                           EndDate=DateTime.Now.AddDays(1), ID=1, Name="test"},
                new Model{ BeginDate=DateTime.Now.AddDays(10),
                           EndDate=DateTime.Now.AddDays(12), ID=1, Name="test 2"}
            };
        }
    }
    
    公共类模型
    {
    公共int ID{get;set;}
    公共日期时间起始日期{get;set;}
    公共日期时间结束日期{get;set;}
    公共字符串名称{get;set;}
    公共静态列表GetModels()
    {
    返回新列表{
    新模型{BeginDate=DateTime.Now,
    EndDate=DateTime.Now.AddDays(1),ID=1,Name=“test”},
    新模型{BeginDate=DateTime.Now.AddDays(10),
    EndDate=DateTime.Now.AddDays(12),ID=1,Name=“test 2”}
    };
    }
    }
    
  • 在页面上放置一个
    GridView
    ,点击
    GridView
    右上角的小
    [>]
    打开任务窗口

  • 中选择数据源…
    选择

  • 在打开的
    数据源配置向导
    窗口中,选择
    对象
    ,然后单击
    确定
    。然后选择
    模型
    类作为业务对象,并单击
    下一步>
    。最后在
    select
    选项卡上选择
    GetModels
    ,然后单击finish

  • 在第4点的最后一步之后,将打开一个对话框窗口,其中显示问题
    “刷新“GridView1”的字段和键”
    。克利克:是的。设计器会自动为e添加列