2009-04-08 9 views
3

Was ist der richtige Weg, um die DataBind() - Methode für die Steuerung zu implementieren, die einen Repeater darin haben?Richtiger Weg zum Implementieren der Datenbindung in ASP.NET

Dies sind Anforderungen für diese Steuerung (aber Sie können Ihnen anbieten, wenn er diese an etwas fehlen oder sind ein Overhead)

  • Kontrolle einer Sammlung oder eine zählbare (Liste von Objekten, anonyme Objekte annehmen sollte, Wörterbücher oder Datentabelle)
  • Datasource vollständig entkoppelt werden sollen, von der Steuerung (unter Verwendung von Daten * Feldeigenschaften festlegen Eigenschaften oder Schlüssel abgebildet werden sollen, wie Datavaluefield und Datatextfield in Dropdownlist)
  • die Steuerung sollte gehen Sie einfach auf Viewstate. Wenn möglich, ViewState sollte überhaupt nicht verwendet werden, oder seine Verwendung sollte so niedrig wie möglich sein (speichern Sie einige ID oder so)
  • Das Steuerelement sollte mit jedem Typ umgehen (Konvertierung mit ToString())
  • Inside wenn möglich

ich meine Kontrolle wollen wie so zugänglich sein initialisiert werden von ItemDataBound Lage sein e.DataItem verwenden sollte:

var control = new Control(); 
control.DataDateField = "Date"; 
control.DataNameField = "FullName"; 
control.DataTextField = "Comment"; 
control.DataSource = data; 
control.DataBind(); 

Und Datenelement kann eine der folgenden

sein

Liste der Wörterbücher (oder Tabellenzeilen)

var data = new List<Dictionary<string, string>> 
{ 
    new Dictionary<string, string> 
     {{"Date", "2009-03-15"}, {"FullName", "John Walker"}, {"Comment", "comment1"}}, 
    new Dictionary<string, string> 
     {{"Date", "2009-03-12"}, {"FullName", "Chuck Norris"}, {"Comment", "comment2"}}, 
    new Dictionary<string, string> 
     {{"Date", "2009-03-13"}, {"FullName", "Sergej Andrejev"}, {"Comment", "comment3"}} 
}; 

Liste der anonymen Objekte

var data = new List<object> 
{ 
    new {Date = "2009-03-15", FullName = "John Walker", Comment = "comment1"}, 
    new {Date = "2009-03-12", FullName = "Chuck Norris", Comment = "comment2"}, 
    new {Date = "2009-03-13", FullName = "Sergej Andrejev", Comment = "comment3"}, 
}; 

Liste der ojekte

public class SampleClass 
{ 
    public object Date { get; set; } 
    public object FullName { get; set; } 
    public object Comment { get; set; } 

    public SampleClass(string date, string fullName, string comment) 
    { 
     Date = date; 
     FullName = fullName; 
     Comment = comment; 
    } 
}; 

var data = new List<SampleClass> 
{ 
    new SampleClass("2009-03-15", "John Walker", "comment1"), 
    new SampleClass("2009-03-12", "Chuck Norris", "comment2"), 
    new SampleClass("2009-03-13", "Sergej Andrejev", "comment3"), 
}; 

Datatable

var data = new DataTable(); 
data.Columns.Add(new DataColumn { DataType = typeof(DateTime), ColumnName = "Date" }); 
data.Columns.Add(new DataColumn { DataType = typeof(string), ColumnName = "FullName" }); 
data.Columns.Add(new DataColumn { DataType = typeof(string), ColumnName = "Comment" }); 

data.Rows.Add(new object[] { DateTime.Parse("2009-03-15"), "John Walker", "comment1" }); 
data.Rows.Add(new object[] { DateTime.Parse("2009-03-12"), "Chuck Norris", "comment2" }); 
data.Rows.Add(new object[] { DateTime.Parse("2009-03-13"), "Sergej Andrejev", "comment3" }); 

Im Grunde, was Ich möchte einen universellen Code für die Datenbindung, damit ich keine Zeit verschwenden muss, wenn ich jedes Mal, wenn ich ein neues Steuerelement erstelle, von Grund auf neu erstelle. Ich würde mich über Hinweise auf gute Praktiken, offizielle Führer und natürlich Ihre persönliche Erfahrung freuen. Hier

Antwort

0

Jede Art und Weise wahrscheinlich hat es Vor- und Nachteile ist. Hier ist, was ich sehe:

  1. Wörterbücher sind schön, weil sie sehr häufige Objekte sind, jeder sollte wissen, wie man sie benutzt und manipuliert. Die Syntax kann jedoch hässlich werden.

  2. Anonyme Objekte haben eine gut aussehende, saubere Syntax und eignen sich auch hervorragend für die schnelle Implementierung einer einmaligen Lösung. Ich habe versucht, sie für etwas Ähnliches zu verwenden, bin aber schnell auf einige Einschränkungen gestoßen. Wenn Sie also wirklich mit ihnen "arbeiten" müssen, müssen Sie sie möglicherweise ausrangieren.

  3. Eine Liste von Objekten ähnelt einem Wörterbuch, eignet sich jedoch zum besseren Verständnis dessen, was Sie erreichen möchten. Sie haben bessere Lesbarkeit und leichtere Verständlichkeit, aber es ist ein anderes Objekt in Ihrer Bibliothek, das nur einmal verwendet wird. Es könnte zu viel tippen für was für ein einfaches Problem.

  4. Ich denke, ich habe DataTables wie Sie früher einmal verwendet, weil ich nicht wusste, was ich tat. Wenn es zwischen diesem und einem Dictionary ist, verwenden Sie ein Dictionary, da sie häufiger und generische Objekte sind.

Nur mein $ .02, aber es kommt wirklich darauf an, was für Sie am wichtigsten für das Problem, das Sie lösen (Ablesbarkeit/consiseiveness/Verstehbarkeit/...) und wenn es bereits und Konventionen in Ihre aktuelle Codebasis.

Mark

+0

Ich möchte, dass meine Steuerung alle 4 Möglichkeiten akzeptiert, nicht nur eine dieser Optionen –

0

Ich weiß, das beantwortet nicht vollständig Ihre Frage, sondern als ergänzende Informationen:

Sie können auch in ASP.NET Dynamic Data suchen. Es verwendet den Datentyp der gebundenen Eigenschaft, um die Art des anzuzeigenden Steuerelements/Benutzersteuerelements zu bestimmen. Es fügt auch zusätzliche Funktionalität auf der Grundlage dessen hinzu, was diese Daten im Kontext des gesamten Domänen-/Geschäftsobjektmodells darstellen. (Wenn es sich um ein ID-Feld, einen Fremdschlüssel usw. handelt)

Verwandte Themen