【问题标题】:Performance of conditional logic with gridview RowDataBound vs ItemTemplate/Regular databind使用 gridview RowDataBound 与 ItemTemplate/Regular 数据绑定的条件逻辑性能
【发布时间】:2011-06-08 19:15:34
【问题描述】:

我有一个包含大约 16 个 ItemTemplate 列的网格视图。每列中的值是十进制属性。在每一列中,我都在做一些条件逻辑来显示 N/A 或实际值等。类似的东西,

<asp:TemplateField HeaderText="Test" ItemStyle-CssClass="test">                   
    <ItemTemplate>
            <%# Eval("TestExpense", "{0:n}").ToString() == "-1.00" ? "N/A" : "$" + Eval("TestExpense", "{0:n}")%> 
    </ItemTemplate>
</asp:TemplateField>

网格返回许多行,在大多数情况下为 30,000。网格有分页,因此一次只能看到 10 行。 (是的,我确实把数据库中的所有行都带回来了,在 SQL 中没有分页。搜索很复杂,需要时间)

问题是,我是否应该在 RowDataBound 事件中执行此逻辑,我可以说仅在行可见时执行此逻辑。这可确保一次仅使用此逻辑处理 10 个可见行(对于活动页面)。如果我进行常规数据绑定,数据网格是否足够智能,可以仅对 10 行执行 ItemTemplate 逻辑,还是对所有 30,000 行执行。这将是不必要的。

为了补充这个问题,我有一些从其他属性派生的模板列。如果我进行常规数据绑定,网格是通过每一行的所有列计算还是只对可见行进行计算。

我相信如果我使用 RowDataBound 事件,我可以控制这一切。但另一种选择更方便。如果gridview自动做到这一点,那我就不用担心了。有什么想法吗?

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    RowDataBound 和模板字段中的内联代码仅针对活动页面(在您的情况下为 10 行)执行

    如果您没有做任何复杂的事情,我认为将其作为内联代码保留在模板字段中没有问题。

    【讨论】:

    • 好的,很高兴知道。派生属性怎么样。我有一个属性 P2,即 P1* 1.3,它也在模板列中。网格是否只对 10 个可见行进行此计算?
    • 不确定派生属性是什么意思,但如果它在模板列中,它只会对活动页面中的每一行(10 行)执行一次
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 2013-09-11
    相关资源
    最近更新 更多