سؤال

لقد وجدت كيفية ربط asp:Menu بـ XML.لقد وجدت كيفية ربط قائمة asp: بخريطة الموقع (والتي تربطها بالفعل بـ XML).كيف يمكنك ربط asp:Menu بقاعدة بيانات؟

يوفر .NET Framework مصادر بيانات متعددة:

أريد استخدام واحد يمثل البيانات من جدول SQL Server.يتم تخزين البيانات في المعيار الهرمية التنسيق الذي يستخدمه الجميع:

NodeID    ParentNodeID    Caption        Url
========  ==============  =========      =================
{3234...  {3632...        stackoverflow  http://stackov...
{3632...  (null)          Questions      ~/questions.aspx
{3233...  (null)          Tags           ~/tags.aspx
{3235...  {3632...        google         http://www.goo...

وسيكون الاستعلام لإرجاع جميع الصفوف هو:

SELECT * FROM Nodes

ما هي الطريقة السرية التي قصدت Microsoft استخدامها لدمج تلك البيانات في قائمة asp:Menu؟


تحديث: هناك مقالة جيدة على aspalliance.com: إنشاء قائمة هرمية تعتمد على قاعدة البيانات باستخدام ASP.NET 2.0.لسوء الحظ فإنه يصف كيفية تنفيذ ربط بيانات XML؛بينما أنا مهتم بربط قاعدة البيانات.

هل كانت مفيدة؟

المحلول

لا تدعم القائمة الارتباط بـ SqlDataSource لأنها HierarchicalDataBoundControl - يتم دعم مصادر البيانات الهرمية فقط.يجب عليك تنفيذ HierarchicalDataSourceControl الخاص بك.يفحص هنا على سبيل المثال.وبدلاً من ذلك، يمكنك إنشاء موفر خريطة موقع مخصص واستخدام SiteMapDataSource كما هو موضح هنا.وأخيرا يمكنك استخدام سيطرة طرف ثالث والتي يمكن ربطها بـ SqlDataSource.

نصائح أخرى

هناك مقالة جيدة على aspalliance.com: إنشاء قائمة هرمية تعتمد على قاعدة البيانات باستخدام ASP.NET 2.0.تم شرح كل خطوة وتوضيحها بشكل جيد.

"في هذه المقالة، يوضح مايكل كيفية إنشاء قائمة هرمية تعتمد على قاعدة بيانات باستخدام بضعة أسطر فقط من التعليمات البرمجية باستخدام ASP.NET 2.0.هذا برنامج تعليمي يجب قراءته لكل من يحتاج إلى قائمة احترافية قوية ومرنة وذات تصميم مبسط."

رمز يمكن أن يكون:

protected void LoadData()
{
    DataSet ds = new DataSet();
    string connStr = YOUR_CONNECTION_STRING_HERE;
    using(SqlConnection conn = newSqlConnection(connStr))
    {
      string sql = "Select NodeID, Caption, Url, ParentID from Menu";
      SqlDataAdapter da = newSqlDataAdapter(sql, conn);
      da.Fill(ds);
      da.Dispose();
    }
    ds.DataSetName = "Menus";
    ds.Tables[0].TableName = "Menu";
    DataRelation relation = newDataRelation("ParentChild",
     ds.Tables["Menu"].Columns["NodeID"],
     ds.Tables["Menu"].Columns["ParentID"], true);

    relation.Nested = true;
    ds.Relations.Add(relation);

    xmlDataSource.Data = ds.GetXml();
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top