将数据作为控件属性或控制代码加载到UserControl中?

时间:2012-12-21 08:55:16

标签: asp.net user-controls

我正在构建一个UserControl,它将在页面上重复多次。我正在尝试确定哪种最有效的方法来处理我将加载到Control中的数据。为了简单起见,我们可以说它的结构是这样的:

<table>
    <tr>
        <td>Header Item</td>
    </tr>
    <tr>
        <td>Body Item n</td>
    </tr>
    <tr>
        <td>Body Item n+1</td>
    </tr>
    <tr>
        <td>Body Item n+2</td>
    </tr>
    <tr>
        <td>etc.</td>
    </tr>
    <tr>
        <td>Footer Item</td>
    </tr>
</table>

将加载到此Control中的所有数据都将来自SQL Query。 Body项目将在控件的每次迭代中发生变化,但Header和Footer项目将是相同的,这就是我想要在我可以看到的几个选项之间做出决定的地方。

  1. 将查询构建到控件本身后面的代码中,并在控件的每次迭代中重复它,或者:
  2. 查询将使用控件的.aspx.cs页面中的数据,并在创建控件时将其作为属性提供。
  3. 选项1似乎非常低效。如果我们只讨论两个项目,那么我可能只是倾向于接受效率低下的问题,但我们正在讨论更多内容。

    选项2似乎是合理的,但我不知道这实际上是否比选项1更好。

    思考?其他选择?

1 个答案:

答案 0 :(得分:0)

使用Repeater控件

看看这里:
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater(v=vs.80).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1

<asp:Repeater runat="server">

 <HeaderTemplate>
  <table>
   <tr>
    <td>Header Item</td>
   </tr>
 </HeaderTemplate>

 <ItemTemplate>
  <tr>
   <td>Body Item <%# Eval("Number") %></td>
  </tr>
 </ItemTemplate>

 <FooterTemplate>
   <tr>
    <td>Footer Item</td>
   </tr>
  </table>
 </FooterTemplate>

</asp:Repeater>