ich eine verschachtelte Gridview haben wie folgt:Nested Gridview sollte/Einsturz erweitern, wenn Zeile geklickt wird
<asp:GridView ID="gvParent" runat="server" DataKeyNames="id">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:GridView ID="gvChild" runat="server">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="lblChild1" runat="server"/>
</ItemTemplate>
</asp:TemplateField>
//... some more child columns
</Columns>
</asp:GridView>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="lblParent1" runat="server"/>
</ItemTemplate>
</asp:TemplateField>
//... some more parent columns
<asp:TemplateField>
<ItemTemplate>
<asp:HiddenField ID="IsExpanded" ClientIDMode="Static" runat="server" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Was ich tun möchte, ist, wenn der Benutzer eine beliebige Stelle auf der übergeordneten Zeile klickt, wird das Kind Reihe, zeigt Alle Zeilen in der untergeordneten GridView, die sich auf das übergeordnete Element beziehen. Wenn ich dann erneut klicke, sollte es zusammenklappen.
Ich kann die Daten in die GridViews fein bekommen und kann die Expand/Collapse Funktion wie in this tutorial bekommen, aber ich will nicht nur das Bild klickbar haben, ich möchte die ganze Zeile anklickbar.
zumindest versuchen und es ich die gleiche Logik aus dem Tutorial zu erweitern: auf der rechten Seite des angeklickten Spalte in dieser Zeile auf die
$(function() {
$("[id*=gvParent] td").click(function() {
$(this).closest("tr").after("<tr><td></td><td colspan = '999'>" + $(this).next().html() + "</td></tr>");
});
});
Aber es um den Inhalt der Spalte nur Kopien nächste Reihe (siehe snip). Ich bin mir sicher, es ist wahrscheinlich einfach, aber ich kann nirgends die Antwort finden!
UPDATE:
Ich habe jetzt:
$("[id*=gvFileUploadAdmin] td").click(function() {
if ($("#IsExpanded").val() == "expanded") {
debugger;
collapseRow(this);
}
else if (typeof $("#IsExpanded").val() == 'undefined'
|| $("#IsExpanded").val() == "collapsed") {
expandRow(this);
}
});
function expandRow(row) {
$(row)
.closest("tr")
.after("<tr><td></td><td colspan = '999'>" +
$("[id*=pnlFiles]", $(row).closest("tr")).html() +
"</td></tr>");
$("#IsExpanded").val("expanded");
};
function collapseRow(row) {
$(row).closest("tr").next().remove();
$("#IsExpanded").val("collapsed");
}
Was mir Reihen zu öffnen und zu schließen einzelne erlaubt, aber wenn eine Zeile offen ist, und dann wird eine andere geöffnet, wird die Zeile neben dem gelöscht . Mit den eindeutigen IDs ist definitiv etwas los, aber ich bin mir nicht sicher, wie ich es beheben soll. Ich habe einige C# im Hintergrund haben dies zu tun:
HiddenField IsExpanded = row.FindControl("IsExpanded") as HiddenField;
var uniqueId = IsExpanded.UniqueID;
IsExpanded.Value = Request.Form[uniqueId];
Aber wenn dieser entfernt ist es macht keinen Unterschied, wie es funktioniert, weil Request.Form [UniqueId] gibt null zurück.
Vielen Dank für Ihre Antwort, aber nach [diese Frage] (http://stackoverflow.com/questions/891918/asp-net-grid-view-vs-list-view), ein Listview ist nicht wirklich wonach ich suche. Außerdem möchte ich die ganze Zeile klickbar machen, nicht nur eine Schaltfläche. – madster
Die Verknüpfungsschaltfläche ist nicht sichtbar - sie macht im Wesentlichen die gesamte Zeile anklickbar/auswählbar. – Renshai
Aoplogies für die Aufsicht vor. Ich habe jetzt alle oben genannten implementiert, aber die verschachtelte Gridview wird nicht angezeigt, wenn die Zeile ausgewählt ist, die gleiche Liste wird angezeigt. Sobald es wieder ausgewählt ist, verschwinden alle Zeilen. Ich denke nicht, dass dies der richtige Ansatz ist, da ich nur die Felder in der ausgewählten Elementvorlage wiederhole, und ich muss sie manuell bearbeiten, um sie in einem Rasterformat anzuzeigen, während dies bereits bei einer Rasteransicht der Fall ist. – madster