2009-07-06 7 views
2

Ich möchte ein hierarchisches Data gebundenes Steuerelement für ASP.NET implementieren.Implementieren eines HierarchicalDataBoundControl für ASP.NET

Ich habe Implementing IHierarchy Support Into Your Custom Collection als Basis verwendet, um meine hierarchische Sammlung zu erstellen. Ich habe auch ein HierarchicalDataSourceControl für die Sammlung erstellt. Alles funktioniert: Ich kann es an ein ASP.NET TreeView binden und es die Daten richtig darstellt.

Allerdings stecke ich auf dem HierarchicalDataBoundControl fest. Ich habe Beispiele gefunden, aber ich bin noch zu neu bei C#/.Net, um sie zu verstehen. Ich verstehe nicht ganz, wie die Beispiele implementieren:

Rendering a databound UL menu

noch

HierarchicalDataBoundControl Class

Hat jemand irgendwelche Tipps, oder besser Beispiele für eine Steuerung wie diese umzusetzen?

+0

Niemand in diesem Forum hat eine Idee zu diesem Thema? – Breadtruck

+0

Es ist kein Forum. Es ist eine Frage-und-Antwort-Website. Lesen Sie die FAQ: http://stackoverflow.com/faq. Es befindet sich oben auf jeder Seite. –

+0

Ja, ich weiß, es ist kein Forum, ich habe eigentlich nur einen Kommentar hinzugefügt, um zu sehen, was passieren würde, da es ein paar Tage her ist, mein BAD! – Breadtruck

Antwort

-1

Ich konfrontiert ähnliches Problem und erstellte meine eigenen Roh-HTML.

private void LoadCategory() 
{ 
    String s = ""; 

// Planen Sie Ihre Daten-Set DataSet ds // Beachten Sie, dass ich Kategorie Tabelle mit C_NAME UND PC_Name coloums haben, ändern Sie es wie pro Ihre Spalte anme ds.Relations.Add ("rsParentChild", ds.Tables [0] .Columns ["C_NAME"], ds.Tables [0] .Columns ["PC_NAME"]);

s = s + "\n <table>"; 
    s = s + "\n  <tr>"; 
    s = s + "\n   <td class='br4'> "; 
    s = s + "\n    <table>"; 
    s = s + "\n     <tr>"; 
    s = s + "\n      <td>"; 
    s = s + "\n       <ul id='qm0' class='qmmc'>"; 
    foreach (DataRow dr in ds.Tables[0].Rows) 
    { 
     if (dr["PC_NAME"] == DBNull.Value) 
     { 
      s = s + "\n         <li><a class='qmparent' href='#'>" + dr["C_NAME"].ToString() + "</a>"; 
      s = s + "\n         <ul>" + PopulateTree(dr) + "</ul>"; 
     } 
    } 

    s = s + "\n       <li class='qmclear'>&nbsp;</li></ul>"; 
    s = s + "\n       <script type='text/javascript'>qm_create(0,true,0,500,'all',false,false,false,false);</script>"; 
    s = s + "\n     </td>"; 
    s = s + "\n    </tr>"; 
    s = s + "\n   </table>"; 
    s = s + "\n  </td>"; 
    s = s + "\n </tr>"; 
    s = s + "\n </table>"; 
    Literal1.Text = s; 
} 
private String PopulateTree(DataRow dr) 
{ 
    String s = ""; 
    String ss; 
    foreach (DataRow row in dr.GetChildRows("rsParentChild")) 
    { 
     s = s + "        <li><a href=\"javascript:FetchProducts(1,'" + row["C_NAME"].ToString() + "')\">" + row["C_NAME"].ToString() + "</a>\n"; 
     ss = PopulateTree(row); 
     if (ss != "") 
      s = s + "        <ul>" + ss + "</ul></li>\n\n"; 
    } 
    return s; 
} 
+0

Danke, das habe ich selbst gemacht, basierend auf einigen anderen Posts, die ich gefunden habe. Ich habe es in einem Benutzersteuerelement implementiert. Es beantwortet die Frage jedoch wirklich nicht. Ich möchte es immer noch korrekt in einem HierarchicalDataBoundControl bearbeiten – Breadtruck

0

Als eine weitere DataBound Kontrollen Sie haben PerformDataBinding Methode außer Kraft zu setzen wie folgt.

protected override void PerformDataBinding() 
{ 
    base.PerformDataBinding(); 

    if (!IsBoundUsingDataSourceID && this.DataSource == null) return; 

    HierarchicalDataSourceView view = this.GetData(string.Empty); 
    if (view != null) 
    { 
     IHierarchicalEnumerable root = view.Select(); 
    } 
} 

Während Ihrer Kontrolle unterstützt DataSource und HierarchialDataSource Kontrolle in diesem Fall überprüfen sollten, ob ein zugeordneter DataSource ist, bekommen seine DataSourceView zu erreichen Datenbindung. Es ist praktikabel durch GetData Methode. Rufen Sie dann die Methode Select der Ansicht auf, um die Root-Auflistung abzurufen.

Anschließend müssen Sie durch Root-Sammlung, die ein Objekt des Typs ist. Es hat eine einfache Methode namens GetHierarchyData, die ein Objekt gibt, das ein Element der Auflistung ist, und gibt eine zugeordnete IHierarchyData zurück, die einen Knoten beschreibt. Diese Methode ist da, daher kennen Sie den eigentlichen Artikeltyp meistens nicht. IHierarchyData repräsentiert einige Informationen über einen Knoten und seine untergeordneten Elemente.

Schließlich müssen Sie kein neues DataSource Steuerelement schreiben. Wenn Sie nach dem Erstellen eines benutzerdefinierten Navigationssteuerelements suchen, ist es besser, einen neuen Anbieter für SiteMapDataSource zu schreiben.

Verwandte Themen