C# 添加TimeSpan后,ASP Gridview速度减慢,记录计数超过150

C# 添加TimeSpan后,ASP Gridview速度减慢,记录计数超过150,c#,asp.net,datetime,gridview,timespan,C#,Asp.net,Datetime,Gridview,Timespan,我的gridview可以处理900多条记录。但我添加了一个新列,用于计算每行日期中的天数。它取今天的日期,并计算自数据库返回日期起的天数 摘要示例: ------------------------------- | Something | Date | Days | ------------------------------- | A | 3/1/2015 | 2 | | B | 3/1/2014 | 365 | ------------

我的gridview可以处理900多条记录。但我添加了一个新列,用于计算每行日期中的天数。它取今天的日期,并计算自数据库返回日期起的天数

摘要示例:

-------------------------------
| Something | Date      | Days |
-------------------------------
|    A      | 3/1/2015  | 2    |
|    B      | 3/1/2014  | 365  |
-------------------------------
IOnRowDataBound将每行绑定到RowDataBound以自定义标签文本

protected void gvView_RowDataBound (object sender, GridViewRowEventArgs e) {

            Label     daysInCycle   = (Label)e.Row.Cells[0].FindControl("lblDays");

            if (e.Row.RowType == DataControlRowType.DataRow) {
                DataRowView ThisRow = (DataRowView)e.Row.DataItem;

                if (ThisRow.Row.Field<DateTime?> ("MyDate").HasValue) {
                    TimeSpan ts = DateTime.Now - ThisRow.Row.Field<DateTime>("MyDate");
                    daysInCycle.Text = ts.Days.ToString();
                } else {
                    daysInCycle.Text = "N/A";
                }
            }
        }
protectedvoid gvView\u RowDataBound(对象发送方,GridViewRowEventArgs e){
Label daysInCycle=(Label)e.Row.Cells[0].FindControl(“lblDays”);
如果(e.Row.RowType==DataControlRowType.DataRow){
DataRowView ThisRow=(DataRowView)e.Row.DataItem;
if(ThisRow.Row.Field(“MyDate”).HasValue){
TimeSpan ts=DateTime.Now-ThisRow.Row.Field(“MyDate”);
daysInCycle.Text=ts.Days.ToString();
}否则{
daysInCycle.Text=“不适用”;
}
}
}
在我的gridview中的.aspx文件中

 <asp:TemplateField HeaderText="Days">
                <ItemTemplate>
                     <asp:Label ID="lblDays" runat="server" Text="NA"></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>


关于为什么我的gridview/IE在包含时间跨度后会变得无响应并且只是挂起,有什么想法吗?如果我进行TimeSpan计算,gridview将返回其正常响应状态。

我没有看到任何会导致挂起的内容。但不需要在每个
RowDataBound
事件中创建Now()的新实例

将datetime变量声明为page类的成员变量:

DateTime TimeStamp;
数据绑定
事件中,将变量设置为DateTime。现在:

TimeStamp = DateTime.Now;
然后在
RowDataBound
中使用变量,而不是调用Now()

Label daysInCycle=(Label)e.Row.Cells[0].FindControl(“lblDays”);
daysInCycle.Text=“不适用”;
如果(e.Row.RowType==DataControlRowType.DataRow){
DataRowView ThisRow=(DataRowView)e.Row.DataItem;
if(ThisRow.Row.Field(“MyDate”).HasValue){
TimeSpan ts=时间戳-ThisRow.Row.Field(“MyDate”);
daysInCycle.Text=ts.Days.ToString();
} 
}
Label daysInCycle   = (Label)e.Row.Cells[0].FindControl("lblDays");
daysInCycle.Text = "N/A";

if (e.Row.RowType == DataControlRowType.DataRow) {
    DataRowView ThisRow = (DataRowView)e.Row.DataItem;

    if (ThisRow.Row.Field<DateTime?> ("MyDate").HasValue) {
        TimeSpan ts = TimeStamp - ThisRow.Row.Field<DateTime>("MyDate");
        daysInCycle.Text = ts.Days.ToString();
    } 
}