【问题标题】:How to Bind SiteMap Treeview datasource using c#如何使用 c# 绑定 SiteMap Treeview 数据源
【发布时间】:2014-01-17 21:36:15
【问题描述】:

我的页面上有 SiteMap 数据源控件

<div id="content_inside">


    <asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" />
         <asp:TreeView ID="TreeView1" ExpandDepth="2"
         </asp:TreeView>

</div>

不,我正在尝试使用以下代码 sn-p 绑定它的树视图

  protected void Page_Load(object sender, EventArgs e)
        {
            var context = new moviescontext ();

            var movies= context.movie.GetAll(ref context);

            if (!IsPostBack)
            {

                TreeView1.DataSourceID = "SiteMapDataSource1";
               TreeView1.DataSource = movies;
                TreeView1.DataBind();


            }
        }

'GetAll' 是从数据库中获取数据的函数

public static List<movies> GetAll(this IEnumerable<movie> movie, ref moviescontext ctx)
{
    var movies= ctx.movie

                         .Select(s => new movies
                         {
                             MovieId= s.MovieID,
                             MovieName = s.MovieName,

                         }).ToList();

    return movies;
}

渲染时出现以下错误

HierarchicalDataBoundControl only accepts data sources that implement IHierarchicalDataSource or IHierarchicalEnumerable.

有什么建议吗?

【问题讨论】:

  • 当您的数据只有一个级别时不要使用分层控件
  • 如果我以编程方式将 xml 写入 web.sitemap 文件怎么样。那会是更好的方法吗?

标签: c# asp.net linq entity-framework sitemap


【解决方案1】:

你需要实现IHierarchicalEnumerable接口。

你可以这样做:

        public class MovieCollection : List<Movie>, IHierarchicalEnumerable
        {

            public IHierarchyData GetHierarchyData(object enumeratedItem)
            {
                return enumeratedItem as IHierarchyData;
            }

            public System.Collections.IEnumerator GetEnumerator()
            {
                throw new NotImplementedException();
            }
        }

然后像这样添加您现有的电影:

public static List<movies> GetAll(this IEnumerable<movie> movie, ref moviescontext ctx)
{
    var movies= ctx.movie

                         .Select(s => new movies
                         {
                             MovieId= s.MovieID,
                             MovieName = s.MovieName,

                         }).ToList();
            var movieCollection = new MovieCollection();
            movieCollection.AddRange(movies);

    return movieCollection;
}

TreeView 通常用于显示嵌套数据,而您当前的数据只包含一个级别。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多