Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Ошибка в SiteMapDataSource1 / 5 сообщений из 5, страница 1 из 1
14.08.2012, 23:16
    #37916767
xDMK
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в SiteMapDataSource1
Найдено несколько узлов с одинаковым ключом ''. XmlSiteMapProvider требует, чтобы узлы карты веб-узла имели уникальные ключи.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Configuration;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.Common;
using System.Data.Entity;
using System.Data.SqlClient.SqlGen;

namespace CMS.BLL
{
    public class SqlSiteMapProvider : StaticSiteMapProvider
    {
        private string connectionString;
        private string providerName;
        private string storedProcedure;
        private bool initialized = false;
        public override void Initialize(string name, System.Collections.Specialized.NameValueCollection attributes)
        {
            if (!IsInitialized)
            {
                base.Initialize(name, attributes);
                providerName = attributes["providerName"];
                connectionString = attributes["connectionString"];
                storedProcedure = attributes["storedProcedure"];
                if (string.IsNullOrEmpty(providerName))
                {
                    throw new ArgumentException("The provider name was not found");
                }
                else if (string.IsNullOrEmpty(connectionString))
                {
                    throw new ArgumentException("The provider name was not found");
                }
                else if (string.IsNullOrEmpty(storedProcedure))
                {
                    throw new ArgumentException("The provider name was not found");
                }
                initialized = true;
            }
        }
        public virtual bool IsInitialized
        {
            get { return initialized; }
        }
        private SiteMapNode rootNode;
        public override SiteMapNode BuildSiteMap()
        {
          
               
                    Clear();
                    DbProviderFactory provider = DbProviderFactories.GetFactory(providerName);
                    DbConnection con = provider.CreateConnection();

                    con.ConnectionString = connectionString;

                    DbCommand cmd = provider.CreateCommand();
                    cmd.CommandText = storedProcedure;
                    cmd.CommandType = System.Data.CommandType.StoredProcedure;
                    cmd.Connection = con;

                    DbDataAdapter adapter = provider.CreateDataAdapter();
                    adapter.SelectCommand = cmd;

                    System.Data.DataSet ds = new System.Data.DataSet();
                    adapter.Fill(ds, "Products");
                    DataTable dtSiteMap = ds.Tables["Products"];
                    DataRow rowRoot = dtSiteMap.Select("ParentLocationId IS NULL")[0];
                  
                    rootNode = new SiteMapNode(this,
                        rowRoot["Url"].ToString(),
                        rowRoot["Url"].ToString(),
                        rowRoot["Name"].ToString(),
                        rowRoot["Descr"].ToString());
                    
                    string RootID = rowRoot["Id"].ToString();
                    AddNode(rootNode);
                    AddChildren(rootNode, RootID, dtSiteMap);
                  
                
            
            return rootNode;
        }
        private void AddChildren(SiteMapNode rootNode, string RootID, DataTable dtSiteMap)
        {
            DataRow[] childRows = dtSiteMap.Select("ParentLocationId = " + RootID);
            foreach (DataRow row in childRows)
            {
                SiteMapNode childNode = new SiteMapNode(this,
                       row["Url"].ToString(),
                        row["Url"].ToString(),
                        row["Name"].ToString(),
                        row["Descr"].ToString());
                string rowID = row["Id"].ToString();
                AddNode(childNode, rootNode);
                AddChildren(childNode, rowID, dtSiteMap);
            }
        }
        protected override SiteMapNode GetRootNodeCore()
        {
            return BuildSiteMap();
        }
        public override SiteMapNode RootNode
        {
            get
            {
                return BuildSiteMap();
            }
        }
        protected override void Clear()
        {
            lock (this)
            {
                rootNode = null;
                base.Clear();
            }
        }
    }
}


соединение с базой данных
Код: plaintext
1.
2.
3.
4.
5.
6.
   <siteMap defaultProvider="SqlSiteMapProvider">
     <providers>
       <add name="SqlSiteMapProvider" type="CMS.BLL.SqlSiteMapProvider" providerName="System.Data.SqlClient" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Bitrix.mdf;Integrated Security=True;User Instance=True" storedProcedure="GetSiteMap"/>
     </providers>
   </siteMap>
  </system.web>


Дизайн
Код: plaintext
1.
2.
    <asp:TreeView ID="TreeNav" runat="server" DataSourceID="SiteMapDataSource1"></asp:TreeView>
    <asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" StartFromCurrentNode="false" ShowStartingNode="false"/>
...
Рейтинг: 0 / 0
15.08.2012, 01:58
    #37916824
xDMK
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в SiteMapDataSource1
xDMK,


Вопрос немного решился, но ещё остаётся многое загадкой
...
Рейтинг: 0 / 0
15.08.2012, 09:06
    #37916929
VIT2708
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в SiteMapDataSource1
xDMK,

Может тебе проще будет создать XML файл и там хранить данные для SiteMapDataSource1 чем играться с базой?
...
Рейтинг: 0 / 0
15.08.2012, 09:10
    #37916936
VIT2708
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в SiteMapDataSource1
xDMK,

Если надумаешь привязывать SiteMapDataSource1 не к базе то глянь вот этот сайт

http://asp-net-example.blogspot.com/2009/04/how-to-data-bind-treeview-with.html
...
Рейтинг: 0 / 0
15.08.2012, 09:28
    #37916964
xDMK
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в SiteMapDataSource1
VIT2708,

Как мне подвязать Id или class к ul если я использую asp:menu?
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Ошибка в SiteMapDataSource1 / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]