Frage

Ich habe einen Rails-Hintergrund und arbeite an einem ASP.NET-Projekt (nicht an ASP MVC).Neulingsfrage:Was ist der einfachste Weg, einen benutzerdefinierten Editor für eine Datensatztabelle zu erstellen?

Zum Beispiel:Ich habe eine Reihe von Datenzeilen und möchte das Feld „Kategorie“ in jeder Zeile ändern – vielleicht ein Dropdown-Menü, vielleicht einen Link, vielleicht gibt der Benutzer es ein.

In Rails würde ich die Zeilen durchlaufen, um eine Tabelle zu erstellen, und hätte für jede Zeile ein Formular.Das Formular verfügt über ein Eingabefeld oder Dropdown-Menü und sendet die Daten an einen Controller wie „/item/edit/15?category=foo“, wobei 15 die Artikel-ID und die neue Kategorie „foo“ ist.

Ich bin neu im ASP.NET-Modell und bin mir nicht sicher, wie ich das „richtig“ machen soll – nur die einfachste Möglichkeit, die neuen Daten wiederherzustellen und zu speichern.Würde ich ein benutzerdefiniertes Steuerelement erstellen und es an jede Zeile anhängen?Jede Hilfe wird geschätzt.

War es hilfreich?

Lösung

Sie können heutzutage WIRKLICH schummeln und einen Blick auf die neuen dynamischen Daten werfen, die mit .NET 3.5 SP1 geliefert werden.Scott Guthrie hat hier einen Blogeintrag, der zeigt, wie schnell und einfach es für Sie funktioniert:

http://weblogs.asp.net/scottgu/archive/2007/12/14/new-asp-net-dynamic-data-support.aspx

Ohne SO auf dem neuesten Stand zu sein, würde ich den XSD-Generator verwenden, um ein stark typisiertes DataSet zu generieren, das mit der betreffenden Tabelle übereinstimmt.Dadurch wird auch der TableAdapter generiert, den Sie für alle Ihre CRUD-Anweisungen verwenden können.

Binden Sie es von dort aus an ein DataGrid und nutzen Sie alle damit verbundenen Standardvorlagen/Ereignisse, wie EditIndex, SelectedIndex, RowEditing, RowUpdated usw.

Ich mache das seit den frühen 1.0-Tagen von .NET und diese Art von Funktionalität wurde mit jedem Update des Frameworks immer schlanker.

BEARBEITEN:Ich möchte auch kurz dem Blog von Matt Berseth nicken.Ich verfolge viele seiner Sachen schon seit einiger Zeit und es ist großartig!

Andere Tipps

Es gibt einige Steuerelemente, die dies für Sie erledigen, wobei die Komplexität je nach ihrer relativen Flexibilität unterschiedlich hoch ist.

Der herkömmliche Weg hierfür wäre das DataGrid-Steuerelement, das Ihnen ein Tabellenlayout bietet.Wenn Sie eine flexiblere Darstellung wünschen, verfügen die Steuerelemente DataList und ListView auch über eine integrierte Unterstützung für das Bearbeiten, Einfügen oder Löschen von Feldern.

Kasse Matt Berseths Blog für einige hervorragende Beispiele für asp.net-Steuerelemente in Aktion.

Danke für die Antworten Jungs.Es sieht so aus, als wäre die Anpassung des DataGrid der richtige Weg.Für alle ASP.NET-Neulinge: Folgendes mache ich

<asp:DataGrid ID="GridView1" runat="server" AutoGenerateColumns="False">
    <Columns>
        <asp:BoundColumn DataField="RuleID" Visible="False" HeaderText="RuleID"></asp:BoundColumn>
        <asp:TemplateColumn HeaderText="Category">
        <ItemTemplate>
            <!-- in case we want to display an image -->
            <asp:Literal ID="litImage" runat="server">
            </asp:Literal>
            <asp:DropDownList ID="categoryListDropdown" runat="server"></asp:DropDownList>
         </ItemTemplate>
        </asp:TemplateColumn>

    </Columns>
</asp:DataGrid>

Dadurch wird ein Datagrid erstellt.Wir können es dann an eine Datenquelle (in meinem Fall DataTable) binden und Dinge wie verwenden

foreach (DataGridItem item in this.GridView1.Items)
{
     DropDownList categoryListDropdown = ((DropDownList)item.FindControl("categoryListDropdown"));
     categoryListDropdown.Items.AddRange(listItems.ToArray());
}

um das anfängliche Dropdown-Menü im Datenraster zu füllen.Sie können in diesem Fall auch auf item.Cells[0].text zugreifen, um die RuleID abzurufen.

Anmerkungen für mich:Das ASP.NET-Modell erledigt alles in der CodeBehind-Datei.Auf einer hohen Ebene können Sie jederzeit GridView1.Items durchlaufen, um jede Zeile abzurufen, und item.findControl("ControlID"), um den bei jedem Element gespeicherten Wert abzufragen, beispielsweise nach dem Klicken auf die Schaltfläche "Aktualisieren".

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top