添加TimeSpan后,ASP Gridview减速,记录数超过150

时间:2015-03-03 20:04:26

标签: c# asp.net datetime gridview timespan

我的gridview适用于900多条记录。但我添加了一个新列,用于计算每行日期的天数。它需要今天的日期并计算自数据库返回日期以来的天数。

摘要示例:

-------------------------------
| Something | Date      | Days |
-------------------------------
|    A      | 3/1/2015  | 2    |
|    B      | 3/1/2014  | 365  |
-------------------------------

OnRowDataBound 每行到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";
                }
            }
        }

在.aspx文件中的gridview中

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

有关为什么我的gridview / IE会变得无法响应并且在包含 TimeSpan 后挂起的任何想法?如果我取出TimeSpan计算,gridview将返回其正常的响应自我。

1 个答案:

答案 0 :(得分:0)

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

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

DateTime TimeStamp;

DataBinding事件中,将变量设置为DateTime.Now:

TimeStamp = DateTime.Now;

然后在RowDataBound中使用变量而不是调用Now()。

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();
    } 
}