asp.net数据源实例化类

asp.net数据源实例化类

问题描述:

我有一个静态方法,它接受一个参数并返回一个类。该类有一个ReadOnlyCollection属性,我想在一个asp:repeater中显示。有没有办法使用LinqDataSource或ObjectDataSource做到这一点?我与ObjectDataSource非常接近,但由于该方法返回一个类对象,我不能让我转发器绑定到属性..这是我做的:asp.net数据源实例化类

ClassName:ClassName StaticMethod:StaticMethod(ParamName ) ReadOnlyCollection:ClassName.Collection

<asp:objectdatasource 
    runat="server" 
    id="myData" 
    selectmethod="StaticMethod" 
    typename="ClassName" 
> 
    <selectparameters> 
    <asp:parameter name="ParamName" defaultvalue="Value" /> 
    </selectparameters> 
</asp:objectdatasource> 

<asp:repeater runat="server" datasourceid="myData"> 
    <itemtemplate> 
    <%# Container.DataItem %> 
    </itemtemplate> 
</asp:repeater> 

所以,这只能返回只读集合对象,而不是每一个,因为我想项目。 这可能没有实际的代码来实例化对象吗?

如果您只关心在集合中显示数据,则可以添加另一个静态方法,该方法返回对象ReadOnlyCollection并绑定到该对象。另外,您可以沟的ObjectDataSource并做到这一点的代码,类似:

var myObj = ClassName.StaticMethod(someParam); 
    MyRepeater.DataSource = myObj.Collection; 
    MyRepeater.DataBind(); 

如果您需要在您的类和集合同时显示的数据,那么你就可以在另一台转发器添加到ItemTemplate:它

<asp:objectdatasource runat="server" id="myData" 
selectmethod="StaticMethod" typename="ClassName"> 
    <selectparameters> 
     <asp:parameter name="ParamName" defaultvalue="Value" /> 
    </selectparameters> 
</asp:objectdatasource> 

<asp:Repeater runat="server" datasourceid="myData" OnItemDataBound="Rep_ItemDataBound"> 
    <ItemTemplate> 
     <%# Eval("SomeProperty") %> 
     <ul> 
      <asp:Repeater id="RepCollection" runat="server"> 
       <ItemTemplate> 
        <li><%# Eval("SomeCollectionProperty") %></li> 
       </ItemTemplate> 
      </asp:Repeater> 
     </ul> 
    </ItemTemplate> 
</asp:Repeater> 

该方法的ItemDataBound会看起来像:

protected void Rep_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item) 
    { 
     var dataItem = (ClassName)e.Item.DataItem; 
     var innerRepeater = (Repeater)e.Item.FindControl("RepCollection"); 
     innerRepeater.DataSource = dataItem.Collection; 
     innerRepeater.DataBind(); 
    } 
} 
+0

好,我需要从类名的数据对象太...有没有一种方法,使基于财产FR另一个数据源om现有的数据源? – Rob 2009-10-30 15:26:20

+0

你可以很容易地嵌套中继器。所以你可以做的是为你的ReadOnlyCollection添加一个子Repeater,然后在外部控件的ItemDataBound事件中以编程方式绑定它。 – richeym 2009-10-30 15:46:37

+0

老鼠..好吧..这就是我担心的..好吧.. – Rob 2009-10-30 17:25:36