DevTrain .NET Developers Home. Das Community Portal für ASP.NET, Visual Basic, C#
 
  Login Status: Hallo   Anmelden  Suche:  
Navigationslinks überspringen
Startseite
Artikel
Blogs
Foren
ClubClub erweitern

 
Ihre Optionen
Save
Mail
Print
Rate
 
Advertising
  Advanced Developers Track vom 24.-25. Februar 2010 im ehem. IMAX München

 
Navigationslinks überspringen
Autor:Hannes Preishuber

Mehrfach Auswahl im Gridview

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:

GridView1.DeleteRow(i)

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.

 

 

 


Diskutieren Sie in den Foren

DevTrain Camp – Schneller zum .NET 4.0 Developer!