ASP.NET无法通过内联编码访问在Page load中创建的数据表

时间:2008-10-28 13:38:25

标签: asp.net pageload inline-code

在我的Page_Load代码隐藏文件事件中,我将数据加载到datatable中。在我的.aspx页面中,我有一些内联编码,我想显示来自此数据表的一些数据。但是当我运行程序时,它显示错误,如“错误64使用未分配的局部变量'dtblChild'” dtblChild是我的DataTable对象

加载表单元素后,是否在代码隐藏中执行Page_Load?

6 个答案:

答案 0 :(得分:1)

内联代码在渲染阶段执行。

在页面的lifecycle中,Render的发生时间远远晚于Load

答案 1 :(得分:0)

是的,页面加载在所有服务器控件加载到内存后执行,但是如果要使用它,则必须确保在每次刷新时重新填充数据表。

我认为您的问题表明您绑定到网页的方式存在一些更深层次的问题。

你可以发布一些代码吗?

答案 2 :(得分:0)

尝试使用转发器控件或datagridview而不是<% %>蜜蜂蜇。太多内联代码与代码隐藏文件不能很好地混合:您可以获得意想不到的结果。它可以工作,如果你真的知道你在做什么,但你必须小心,我不会推荐给ASP.Net新手。

我还建议您花点时间熟悉ASP.Net Page Lifecycle

答案 3 :(得分:0)

这是我的内联编码

&LT; / TR&GT;  &LT;%       foreach(dtblChild.Rows中的DataRow博士)       {     %GT;     &LT; TR&GT;&LT; TD&GT; Thissss&LT; / TD&GT;&LT; / TR&GT;          &LT;%

  }

%GT;

在Page_Load后面的代码中,我将Data填充到DataTable对象(dtblChild)

答案 4 :(得分:0)

更多的“ASP.Net-ish”方法是这样的:

<asp:Repeater ID="MyRepeater" runat="server" DataSource="dtblChild">
    <ItemTemplate>
        <tr><td>Thisss</td></tr>
    </ItemTemplate>
</asp:Repeater>

您可能还需要声明一个ObjectDatasource来包装数据表,以使其与转发器兼容。

答案 5 :(得分:0)

如上所述,将dtblChild绑定到转发器(或DataGrid)。它将更容易维护。然后在单独的函数中填充DataTable并将其绑定到转发器。需要时在Page_Load中调用该函数。

<table>
<asp:Repeater ID="rptSearchResults" runat="server">
    <ItemTemplate>
        <tr>
            <td><%#DataBinder.Eval(Container.DataItem, "ColumnName") %></td>
        </tr>
    </ItemTemplate>
</asp:Repeater>
</table>

函数LoadData() {

rptSearchResults.DataSource = dtblChild;

rptSearchResults.DataBind();

}