Selezionare righe in un GridView con Asp.Net

E' possibile selezionare una singola riga oppure più righe di un GridView con Asp.Net.

Per creare un GridView fare riferimento all'articolo precedente.

Selezionare una riga singola

Dallo smart task menu attivare Enable Selection e scegliere se si vuole un link, una checkbox oppure un pulsante.
Viene aggiunta la proprietà ShowSelectButton="True" e aggiunta la relativa colonna.

Questo è il codice della pagina aspx che comprende anche il DataSource e i tag relativi alla formattazione.

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
	ConnectionString="<%$ ConnectionStrings:Grid_List_DB %>"
	SelectCommand="SELECT * FROM [Categorie]">
</asp:SqlDataSource>

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="4"
	DataKeyNames="ID" DataSourceID="SqlDataSource1" ForeColor="#333333" GridLines="None">
	<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
	<Columns>
		<asp:CommandField ButtonType="Button" SelectText="Seleziona" ShowSelectButton="True" />
		<asp:BoundField DataField="ID" HeaderText="ID" ReadOnly="True" SortExpression="ID" />
		<asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
		<asp:BoundField DataField="Link" HeaderText="Link" SortExpression="Link" />
		<asp:CheckBoxField DataField="Published" HeaderText="Published" SortExpression="Published" />
		<asp:BoundField DataField="Order" HeaderText="Order" SortExpression="Order" />
		<asp:BoundField DataField="Picture" HeaderText="Picture" SortExpression="Picture" />
		<asp:BoundField DataField="Keywords" HeaderText="Keywords" SortExpression="Keywords" />
	</Columns>
	<EditRowStyle BackColor="#999999" />
	<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
	<HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
	<PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
	<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
	<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
	<SortedAscendingCellStyle BackColor="#E9E7E2" />
	<SortedAscendingHeaderStyle BackColor="#506C8C" />
	<SortedDescendingCellStyle BackColor="#FFFDF8" />
	<SortedDescendingHeaderStyle BackColor="#6F8DAE" />
</asp:GridView>
<br />
<asp:Label ID="lblSelezioneSingola" runat="server"></asp:Label>

Code behind:

Protected Sub GridView1_SelectedIndexChanged(sender As Object, e As System.EventArgs) _ 
		Handles GridView1.SelectedIndexChanged
	
	Dim row As GridViewRow = GridView1.SelectedRow
	lblSelezioneSingola.Text = "Hai selezionato la riga con ID = " & row.Cells(1).Text
End Sub

Selezionare più righe

Questi sono i passaggi per attivare la selezione multipla delle righe in un GridView con Asp.Net:

  • Aggiungere una colonna di tipo Command
  • Convertire la colonna in tipo Template
  • Mettere un controllo di tipo checkbox nella colonna
  • Creare un pulsante fuori dalla Grid e gestire l'evento Click
<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False"
	DataKeyNames="ID" DataSourceID="SqlDataSource1" CellPadding="4" 
	ForeColor="#333333" GridLines="None">
	<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
	<Columns>
		<asp:TemplateField ShowHeader="False">
			<ItemTemplate>
				<asp:CheckBox runat="server" id="chkSelected"></asp:CheckBox>
			</ItemTemplate>
		</asp:TemplateField>
		<asp:BoundField DataField="ID" HeaderText="ID" ReadOnly="True" SortExpression="ID" />
		<asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
		<asp:BoundField DataField="Link" HeaderText="Link" SortExpression="Link" />
		<asp:CheckBoxField DataField="Published" HeaderText="Published" SortExpression="Published" />
		<asp:BoundField DataField="Order" HeaderText="Order" SortExpression="Order" />
		<asp:BoundField DataField="Picture" HeaderText="Picture" SortExpression="Picture" />
		<asp:BoundField DataField="Keywords" HeaderText="Keywords" SortExpression="Keywords" />
	</Columns>
	<EditRowStyle BackColor="#999999" />
	<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
	<HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
	<PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
	<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
	<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
	<SortedAscendingCellStyle BackColor="#E9E7E2" />
	<SortedAscendingHeaderStyle BackColor="#506C8C" />
	<SortedDescendingCellStyle BackColor="#FFFDF8" />
	<SortedDescendingHeaderStyle BackColor="#6F8DAE" />
</asp:GridView>
<br />
<asp:Button ID="btnOttieniRigheSelezionate" runat="server" Text="Otieni righe selezionate" />
<br />
<asp:Label ID="lblSelezioneMultipla" runat="server"></asp:Label>

Code behind: questa funzione scorre tutte le righe del GridView e raccoglie i dati delle righe selezionate.

Protected Sub btnOttieniRigheSelezionate_Click(sender As Object, e As System.EventArgs) _ 
		Handles btnOttieniRigheSelezionate.Click

	lblSelezioneMultipla.Text = String.Empty
	Dim chk As CheckBox

	For Each row As GridViewRow In GridView2.Rows
		chk = row.Cells(0).FindControl("chkSelected")
		If chk.Checked Then
			lblSelezioneMultipla.Text &= String.Format("Riga: {0} - ID: {1}<br />", row.RowIndex, row.Cells(1).Text)
		End If
	Next

	chk = Nothing
End Sub

Autore: Sergio Roberto Boarina