2009-03-03 18 views
0

So hatte ich eine Feature-Anfrage, um Felder zu einer zweiten Tabellenzeile für eine einzelne Datenzeile in einem GridView hinzuzufügen. Zuerst habe ich versucht, die Funktionalität des GridViews zu erweitern, aber bald wurde mir klar, dass dies eine große Aufgabe sein würde und da ich diese Anfrage für ein größeres zukünftiges Feature halte, habe ich mich dagegen entschieden. Möchte auch in naher Zukunft zu MVC wechseln und das wäre Wegwerfcode.Erweiterte ASP.NET Gridview Layout

Also habe ich stattdessen ein kleines jquery-Skript erstellt, um die Zelle in die nächste Zeile der Tabelle zu verschieben.

$(document).ready(function() { 
    $(".fieldAttributesNextRow").each(function() { 
     var parent = $(this).parent(); 
     var newRow = $("<tr></tr>"); 
     newRow.attr("class", $(parent).attr("class")); 

     var headerRow = $(parent).parent().find(":first"); 
     var cellCount = headerRow.children().length - headerRow.children().find(".hide").length; 

     newRow.append($(this).attr("colspan", cellCount)); 
     $(parent).after(newRow); 
    }) 
}); 

Was halten Sie davon? Ist das eine schlechte Designentscheidung? Ich bin wirklich sehr zufrieden mit der Leichtigkeit dieser Lösung. Bitte geben Sie Ihre Gedanken an.

Antwort

0

Dies ist Client-Code, solange Benutzer nicht mit der Gridview spielen, nachdem es geladen ist, sollte es in Ordnung sein. Wenn Sie jedoch etwas mit Postbacks machen wollen, benötigen Sie möglicherweise etwas Refactoring.

Was versuchen Sie mit der Gridview zu erreichen? Überlegen Sie, dass Sie in das Row-Bind-Ereignis einhaken und die aktuelle Zeile ändern können, wie auch immer Sie es brauchen.

+0

Was meinst du "spielen mit dem Gitter"? Dieses Skript nimmt Zellen, die mit der Klasse "fieldAttributesNextRow" markiert sind, und verschiebt sie in eine neu erstellte Zeile unter ihrer vorhandenen Zeile. Es ist ein reines Layout-Problem. Ich benutze Postbacks zu bearbeiten/speichern inline auf dem Gitter alles funktioniert gut. – chief7