domenica 18 aprile 2010

Asp.Net applicare ad un controllo gridview una colonna di tipo DropDownlist

Riporto l'articolo scritto per il sito http://www.iprogrammatori.it/articoli/programmazione/art_creare-una-colonna-di-tipo-dropdownlist-_872.aspx


Introduzione
Nell’articolo viene descritta la tecnica di come inserire in un controllo gridview una colonna di tipo DropDownList, e tramite un controllo di tipo button, rilevare i valori di ogni riga della griglia.
Inserire nella pagina web, un controllo griglia ed un controllo button, il tutto come mostrato in figura 1.




Figura 1



Stesura di codice


Aggiungiamo al controllo griglia, tre colonne due di tipo BoundField, mentre una di tipo templateField.
Nella colonna templateField, inseriamo un controllo di tipo dropDownlist, qui di seguito si riporta il codice Html delle colonne.


<Columns>


<asp:BoundField DataField="Nome" HeaderText="Nome" />


<asp:BoundField DataField="Cognome" HeaderText="Cognome" />


<asp:TemplateField HeaderText="Città">


<ItemTemplate>


<asp:DropDownList ID="DdlCitta" runat="server"></asp:DropDownList>


</ItemTemplate>


</asp:TemplateField>


</Columns>



Come si vede dal codice, le prime due colonne, visualizzeranno i valori dei campi (nome e cognome) che verranno caricati nella griglia, mentre nella clona templateField, visualizzerà una dropDonlist.
Terminato ciò, occorre caricare dei dati, qui di seguito si riporta una funzione che carica un oggetto di tipo datatable, in cui si trovano alcuni dati.


VB.Net


Private Sub CaricaDati()


Dim Nome As New DataColumn("Nome")


Dim Cognome As New DataColumn("Cognome")


Dim Citta As New DataColumn("Citta")



Dim riga As DataRow


Dim dttTabella As New DataTable()


dttTabella.Columns.Add(Nome)


dttTabella.Columns.Add(Cognome)


dttTabella.Columns.Add(Citta)


riga = dttTabella.NewRow()


riga(0) = "EMa"


riga(1) = "Maffei"


riga(2) = "Roma"


dttTabella.Rows.Add(riga)


riga = dttTabella.NewRow()


riga(0) = "EMa2"


riga(1) = "maffei3"


riga(2) = "Milano"


dttTabella.Rows.Add(riga)


riga = dttTabella.NewRow()


riga(0) = "EMa3"


riga(1) = "maffei2"


riga(2) = "Palermo"


dttTabella.Rows.Add(riga)


GridView1.DataSource = dttTabella


GridView1.DataBind()


End Sub



C#



private void CaricaDati()


{


DataColumn Nome = new DataColumn("Nome");


DataColumn Cognome = new DataColumn("Cognome");


DataColumn Citta = new DataColumn("Citta");


DataRow riga;


DataTable dttTabella = new DataTable();


dttTabella.Columns.Add(Nome);


dttTabella.Columns.Add(Cognome);


dttTabella.Columns.Add(Citta);


riga = dttTabella.NewRow();


riga[0] = "EMa";


riga[1] = "Maffei";


riga[2] = "Roma";


dttTabella.Rows.Add(riga);


riga = dttTabella.NewRow();


riga[0] = "EMa2";


riga[1] = "maffei3";


riga[2] = "Milano";


dttTabella.Rows.Add(riga);


riga = dttTabella.NewRow();


riga[0] = "EMa3";


riga[1] = "maffei2";


riga[2] = "Palermo";


dttTabella.Rows.Add(riga);


GridView1.DataSource = dttTabella;


GridView1.DataBind();


}





La funzione viene richiamata nell’evento load della pagina


Ora si deve creare una funzione, che restituisce un oggetto di tipo datable, che viene utilizzata per il caricamento delle varie DropDownList situate all’interno del controllo griglia.


VB.Net


Private Function CaricaCitta() As DataTable


'Dim Nome As New DataColumn("Citta")


'Dim Cognome As New DataColumn("Cognome")


Dim Citta As New DataColumn("Citta")



Dim riga As DataRow


Dim dttTabella As New DataTable()


'dttTabella.Columns.Add(Nome)


'dttTabella.Columns.Add(Cognome)


dttTabella.Columns.Add(Citta)


riga = dttTabella.NewRow()


'riga(0) = "EMa"


'riga(1) = "Maffei"


riga(0) = "Roma"


dttTabella.Rows.Add(riga)


riga = dttTabella.NewRow()


'riga(0) = "EMa2"


'riga(1) = "maffei3"


riga(0) = "Milano"


dttTabella.Rows.Add(riga)


riga = dttTabella.NewRow()


'riga(0) = "EMa3"


'riga(1) = "maffei2"


riga(0) = "Palermo"


dttTabella.Rows.Add(riga)


Return dttTabella


End Function



C#



private DataTable CaricaCitta()


{


DataColumn Citta = new DataColumn("Citta");


DataRow riga;


DataTable dttTabella = new DataTable();


dttTabella.Columns.Add(Citta);


riga = dttTabella.NewRow();


riga[0] = "Roma";


dttTabella.Rows.Add(riga);


riga = dttTabella.NewRow();


riga[0] = "Milano";


dttTabella.Rows.Add(riga);


riga = dttTabella.NewRow();


riga[0] = "Palermo";


dttTabella.Rows.Add(riga);


return dttTabella;


}


Nell’evento RowDataBound, dobbiamo caricare le dropDowlist e poi impostargli il valore di appartenenza al record di cui fa parte.
Con l’oggetto di tipo DataRowView, rilevo il valore della colonna Citta, della sorgente dati di cui è stato caricato il gridView, in questo modo, ho il valore della riga di una determinata colonna, questo valore si utilizza per impostare il valore della dropDowList.

VB.Net


Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound


If e.Row.RowType = DataControlRowType.DataRow Then


Dim dtvCitta As DataRowView = CType(e.Row.DataItem, DataRowView)


Dim citta As String = dtvCitta("Citta").ToString()


Dim dttCitta As DataTable = CaricaCitta()


Dim ddlcitta As DropDownList = DirectCast(e.Row.FindControl("DdlCitta"), DropDownList)


ddlcitta.DataSource = dttCitta


'ddlcitta.DataMember = "Citta"


ddlcitta.DataValueField = "Citta"


ddlcitta.DataBind()


ddlcitta.SelectedValue = citta


End If




C#



protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)


{


if (e.Row.RowType == DataControlRowType.DataRow)


{


DataRowView dtvCitta = (DataRowView)e.Row.DataItem;


string citta = dtvCitta["Citta"].ToString();


DataTable dttCitta = CaricaCitta();


DropDownList ddlcitta = (DropDownList)e.Row.FindControl("DdlCitta");


ddlcitta.DataSource = dttCitta;


ddlcitta.DataValueField = "Citta";


ddlcitta.DataBind();


ddlcitta.SelectedValue = citta;



}


}




Ora non resta che rilevare il valore della combo box, nell’evento click del pulsante, si fa un ciclo per ogni riga, e si visualizza a video il valore.
Qui di seguito si riporta il codice delle suddette operazioni.


VB.Net



For contaRighe As Integer = 0 To GridView1.Rows.Count - 1


Dim Citta As String


Citta = DirectCast(GridView1.Rows(contaRighe).FindControl("DdlCitta"), DropDownList).SelectedItem.Text


Response.Write(Citta + " ")


Next



C#



for (int contaRighe = 0; contaRighe < GridView1.Rows.Count; contaRighe++)


{


string Citta = "";


Citta = ((DropDownList)GridView1.Rows[contaRighe].FindControl("DdlCitta")).SelectedItem.Text ;


Response.Write(Citta + " ");



}




Conclusioni


Abbiamo visto come impostare in un controllo gridview una colonna di tipo dropDownlist, tramite la parola download potete scaricare il sorgente utilizzato in questo articolo sia per il linguaggio vb.Net che per C#.




Download

Nessun commento: