Robert Rausch fragt im Forum ob im von mir geschriebenen Buch ASP.NET 2.0 Crashkurs Beta 2 auch was zur mehrfachselektion im Gridview steht. Und ich muss gestehen, nein, da es fast so wie bisher mit dem Datagrid funktioniert. Aber ich hab noch einen drauf gesetzt das Gridview soll auch komfortabler sein. Aber lesen Sie einfach weiter.
Grobkonzept
Mit Hilfe eines Template Fields wird im Gridview eine Checkbox in jede Zeile eingeblendet. Ein zusätzlicher Button löst dann ein Event aus in dem ausgewertet wird, welche Boxen Checked true haben.
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="wahl" runat="server" />
</ItemTemplate>
</asp:TemplateField> |
Dabei wird einfach jede Reihe des Girdviews durchlaufen und das Control mit dem Namen wahl gesucht und in eine Checkbox gecastet. Wenn dieses als Ergebnis true liefert kann man weitere Programmlogik durchlaufen. In diesem Beispiel den ersten Datakey auslesen. Mit Values würde man eine Auflistung aller Keys erhalten.
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Dim i As Int16
For i = 0 To GridView1.Rows.Count - 1
If CType(GridView1.Rows(i).FindControl("wahl"), CheckBox).Checked() Then
Response.Write("gewählt" & GridView1.DataKeys(i).Value.ToString)
End If
Next
End Sub |
Sehr interessant sind hier auch die neuen Funktionen des Gridviews wie update. Diese aktzeptieren die Row Id als Parameter und führen dann den Update durch. Um z.B. alle selektierten Reihen zu löschen, reicht:
Mehr Komfort
Ich möchte nun noch die Möglichkeit einbauen alle Zeilen auf einmal zu selektieren. Das funktioniert eigentlich am besten im Browser per JScript. Dazu bekommt das Template Field noch eine weitere Checkbox im Headertemplate. Diese Checkbox ruft einen JScript Funktion auf mit dem Namen SelectAll.
<asp:TemplateField> <HeaderTemplate> <asp:CheckBox ID="Alle" OnClick="javascript: return selectAll (this.checked);" runat="server" /> </HeaderTemplate> <ItemTemplate> <asp:CheckBox ID="wahl" runat="server" /> </ItemTemplate> </asp:TemplateField> |
Nun braucht man ein wenig JScript Kenntnisse. Es werden alle Control in der Form durchlaufen. Wenn der Name wahl enthält wird der checked Wert dem Wert der Master Checkbox zugwiesen.
< script language=javascript>
function selectAll (alle)
{ var frm = document.forms[0];
for (i=0; i<frm.length; i++)
{ if (frm.elements[i].id.indexOf('wahl') != -1)
{frm.elements[i].checked = alle;
}}} </script> |
Damit Sie auch wissen wie es aussehen soll, hier das fertige Beispiel im Browser. Die gewählten IDs werden angezeigt.