Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Komplexe Bearbeitung einer Gridview in C#

Ein Ansatz besteht darin, die Aktualisierungen auf eine Ajaxy-Weise zuzulassen, wie Aristos diskutiert. Dies wird normalerweise als benutzerfreundlicherer Ansatz angesehen und bietet sicherlich eine angenehmere Benutzererfahrung, erfordert jedoch Vertrautheit mit jQuery und JavaScript, und die Interaktionen zwischen dem Client und dem Server sind aus Ihrer Sicht etwas komplexer.

Wenn Sie weiterhin das Websteuerungsparadigma verwenden möchten, sollten Sie die Felder „Ankunft um“ und „Abfahrt um“ in TemplateFields umwandeln. Im ItemTemplate könnten Sie weiterhin den Text anzeigen, den Sie in der Datenbank verketten, aber Sie würden ein GridView in das EditItemTemplate einfügen. Diese GridView könnte an ein Datenquellensteuerelement (ebenfalls im EditItemTemplate) gebunden und für die Unterstützung der Bearbeitung konfiguriert werden. Wenn Sie Daten programmgesteuert binden (d. h. Sie sind nicht mithilfe eines Datenquellen-Steuerelements) müssen Sie die Daten immer dann an die untergeordnete GridView binden, wenn die übergeordnete Zeile bearbeitbar wird. Dies kann deklarativ mit Markup wie folgt erfolgen:

<asp:TemplateField ...>
    <EditItemTemplate>
        <asp:GridView runat="server" id="gvChild" DataSource='<%# SomeFunction() %>' ...>
           ...
        </asp:GridView>
    </EditItemTemplate>
</asp:TemplateField>

Hier, SomeFunction wäre (normalerweise) eine Funktion in Ihrer Code-Behind-Klasse, die die Daten zurückgibt, die an das Grid gebunden werden sollen.

Alternativ könnten Sie die Daten programmgesteuert über RowDataBound der übergeordneten GridView an die untergeordnete GridView binden Event-Handler. Sie würden nämlich prüfen, ob Sie es mit der bearbeiteten Zeile zu tun haben (d. h. ob e.Row.RowIndex = ParentGridViewID.EditIndex ). In diesem Fall könnten Sie mit e.Row.FindControl("ChildGridViewID") programmgesteuert auf die untergeordnete GridView verweisen und legen Sie dann seine DataSource fest -Eigenschaft und rufen Sie deren DataBind auf Methode.

Wenn ein Benutzer auf die Schaltfläche "Bearbeiten" für das übergeordnete Raster klickt, werden die Zellen "Ankunft um" und "Abfahrt um" als Raster mit eigenen Schaltflächen zum Bearbeiten angezeigt, um die einzelnen Zeiten zu ändern. Alternativ können Sie die untergeordnete bearbeitbare GridView in die ItemTemplate einfügen, wenn Sie möchten, dass die Benutzer die Zeiten „Ankunft um“ und „Verlassen um“ bearbeiten können, ohne dass der Benutzer zuerst den übergeordneten Datensatz bearbeiten muss.