有ASCX控件将程序加载到页面上。 在Repeater控件中,根据条件显示一组不同的COLUMNS和DataTable以及一组不同的列。
所以,在ASPX页面上,这个构建工作很好。
<ItemTemplate>
<tr class="objectrow" href="<%# GetCompleteViewObjectLink(Convert.ToInt32(Eval("ID_Object")))%>">
<td align="center" class="c1">
<%# Eval("ID_Object") %>
</td>
<% if (GetObjectTypeName() == "Sot")
{ %>
<td align="center" class="c6">
<%# Eval("SOTName") != DBNull.Value ? Eval("SOTName") : ""%>
</td>
<% } %>
............................
但是在程序加载到页面ASCX控件中我有一个例外:
错误:DataBinding: 'System.Data.DataRowView'没有 包含名为SOTName的属性。
而另一个不符合:在aspx-page中我的行上的断点
&lt;%if(GetObjectTypeName()==“Sot”)
正在努力。但是在ascx-control NOT中。
请帮忙!为什么行为如此不同?怎么样?
答案 0 :(得分:0)
检查数据的实际行数,即行数?我敢打赌你的DataSource是空的。
我认为你不应该在你认为自己应该获得数据时获得数据。
用户控件的Page Load事件将在aspx页面加载之前执行。如果你在.aspx的Page Load中的.ascx中获得了某种类型的查询参数,你应该在.aspx的Page_Init中获取它。
答案 1 :(得分:0)
正如TheGeekYouNeed指出的那样,知道何时定义Repeater的DataSource至关重要,因为控件的事件在页面事件之前被处理。
您可以添加
等代码<td>GetObjectTypeName='<%# GetObjectTypeName() %>'</td>
查明if()条件是否适用于您的数据。