5

asp:Menu を XML にバインドする方法を見つけました。asp:Menu をサイト マップにバインドする方法を見つけました (実際には 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 に良い記事があります: Building a Database Driven Hierarchical Menu using ASP.NET 2.0。残念ながら、XML データ バインディングの実行方法について説明しています。データベースバインディングに興味があります。

4

2 に答える 2

10

aspalliance.com に良い記事があります: Building a Database Driven Hierarchical Menu using ASP.NET 2.0。各ステップが説明され、きれいに図解されています。

「この記事では、ASP.NET 2.0 を使用して数行のコードだけでデータベース駆動型の階層メニューを作成する方法を Michael が示します。これは、シンプルなデザインで強力で柔軟なプロフェッショナルなメニューを必要とするすべての人にとって必読のチュートリアルです。 "

のコードは次のようになります。

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();
}
于 2008-11-12T16:02:14.490 に答える
4

メニューは HierarchicalDataBoundControl であるため、SqlDataSource へのバインドをサポートしていません。階層データソースのみがサポートされています。独自の HierarchicalDataSourceControl を実装する必要があります。例については、こちらを確認してください。または、カスタム サイトマップ プロバイダーを作成し、ここに示すように SiteMapDataSource を使用することもできます。最後に、SqlDataSource にバインドできるサードパーティ コントロールを使用できます。

于 2008-11-13T23:35:42.010 に答える