3 Stimmen

GridView Anfangsbearbeitungsmodus?

Ich schreibe eine Webanwendung, die für die Verfolgung und Eingabe einiger täglicher Benutzerdaten verwendet wird... Jeden Tag muss ich einige Daten für mehrere Benutzer manuell eingeben...

Ich wähle das Datum mit dem Kalender, und für dieses Datum erhalte ich DB-Werte für alle Benutzer am gewählten Datum zugeordnet... Wenn es einige Einträge in der Datenbank für dieses Datum gibt, werde ich es in Gridview anzeigen...

Hier ist das Aussehen der Gridview für das gewählte Datum...

USERS   DATA
------------
User1   Data1
User2   Data2
User3   Data3

Aber, wenn ich das Datum wählen, für die es keine Einträge in DB gibt, möchte ich die Gridview containg Benutzernamen in jeder Zeile anzeigen, aber ich möchte die zweite Spalte (DATA-Feld) zunächst für ALLE Zeilen bearbeitbar sein (die gesamte zweite Spalte sollte Textfelder für das Einfügen von Werten enthalten, nicht nur ausgewählte Zeile wie in der standardmäßig bearbeitbaren Gridview-Modus) ermöglicht das Einfügen von gewünschten Werten...

Ich möchte, dass es ungefähr so aussieht

USERS   DATA
----------------
User1   TextBox
User2   TextBox
User3   TextBox

Meine Idee ist es, Benutzer-Liste aus DB zu erhalten und erstellen Sie eine Datentabelle mit ersten Spalte containg zurückgegebenen Benutzernamen, und zweite Spalte leer... Diese Datentabelle wird Datenquelle für Gridview, in dem ich gehe, um den Bearbeitungsmodus zu deaktivieren, und im normalen (Anzeige) Modus werde ich TemplateField containg von Textboxen gebunden, dass Datentabelle in der zweiten Spalte und Etiketten anzeigen Benutzernamen in der ersten Spalte haben... Bei der Eingabe aller Werte wird es eine SAVE-Schaltfläche geben, die eine Methode aufruft, die die eingegebenen Werte aus der Datentabelle liest und in der Datenbank speichert...

Gibt es eine bessere Möglichkeit, diese Funktion zu implementieren? Wenn Templatefield-Textfelder an eine Datentabelle (als Gridview-Datenquelle) gebunden sind, werden die eingegebenen Werte aus dem Datentabellen-Objekt abrufbar sein, aber ein Klick auf die Schaltfläche Speichern führt zu einem Postback, und ich weiß nicht, wie ich den Zustand der Datentabelle erhalten kann. Gibt es einen besseren Weg, um die gewünschte Gridview mit einer ganzen zweiten Spalte für das Einfügen neuer Werte zu erhalten?

Vielen Dank im Voraus für Ihre Hilfe und Zeit!

1voto

0voto

Richard Dudley Punkte 61

Ich würde den gesamten Datensatz über eine linke Verknüpfung in der Datenbank abrufen, und wenn es keinen Eintrag für einen Benutzer gibt, wird dieser Benutzer mit einem leeren Wert zurückgegeben. Etwa so:

select users.user, isnull(einträge.eintrag,'') from benutzer left join entries on users.userid = entries.userid

Ich denke, Sie können die Methode OnDataBinding (oder OnDataBound) überschreiben, um zu prüfen, ob die zweite Spalte leer ist, und das Feld in den Bearbeitungsmodus versetzen, wenn dies der Fall ist. Auf diese Weise werden, wenn einige Benutzer Einträge haben und andere nicht, nur die Benutzer ohne Eintrag im Bearbeitungsmodus sein. Alle Benutzer, die einen Eintrag haben, werden im Anzeigemodus sein. Ein Beispiel hierfür finden Sie unter http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.onrowdatabound.aspx .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X