ProgrammaSubito.it
appunti su ASP.NET 2.0, C#
a cura di Carmine Pacifico
My Facebook

Sostieni ProgrammaSubito.it

Creare un TemplateField da codice

Come creare un TemplateField (contenente una DropDownList) in una GridView da codice (dinamicamente)

Create a TemplateField within dropdownlist dynamically from code

In questo esempio viene mostrato come creare un TemplateField ed un BoundFiled di una Gridview da codice.
Una volta creato il TemplateField sara' inserito al suo interno, sempre dinamicamente, una DropDownList.


>>

File Default.aspx

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

    <title>Untitled Page</title>

</head>

<body>

    <form id="form1" runat="server">

    <div>       

       

        <asp:Label      ID="Label1"

runat="server"

Text="Label">

  </asp:Label>

  <br /><br />

        <asp:GridView   ID="GridView1"

runat="server"

AutoGenerateColumns="False">          

        </asp:GridView>

      

    </div>

    </form>

</body>

</html>



File Default.aspx.cs

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

 

public partial class _Default : System.Web.UI.Page

{

    static private DataSet ds = new DataSet();

 

    protected void Page_Load(object sender, EventArgs e)

    {

        Int32 colCount = GridView1.Columns.Count;

        for(int i = 0; i<colCount; i++)

        {

            GridView1.Columns.RemoveAt(0);

        }

     

        ////////Creo il dataset per la dropdown list

        DataTable dt = new DataTable();

        dt.Columns.Add("Valore");

        dt.Columns.Add("Testo");

        for (int i = 0; i < 2; i++)

        {

            DataRow dr = dt.NewRow();

            dr["Valore"] = i.ToString();

            dr["Testo"] = "Colore"+i.ToString();

            dt.Rows.Add(dr);

        }

        ds.Tables.Add(dt);     

        //////////////////////////////////////////////

 

        //Creo il dataset per la gridview

        DataSet ds2 = new DataSet();

        DataTable dt2 = new DataTable();

        dt2.Columns.Add("CampoNome");       

        for (int i = 0; i < 2; i++)

        {

            DataRow dr2 = dt2.NewRow();

            dr2["CampoNome"] = "Nome" + i.ToString();          

            dt2.Rows.Add(dr2);

        }

        ds2.Tables.Add(dt2); 

        //////////////////////////////////////////////

       

        //Aggiungo un databound alla gridview

        BoundField bf = new BoundField();

        bf.HeaderText = "Nome";

        bf.DataField = "CampoNome";

        GridView1.Columns.Add(bf);

                   

        GridView1.DataSource = ds2;

      

        //Creo il template field

        TemplateField tf = new TemplateField();

       

        tf.HeaderText = "Colore";

        tf.ItemTemplate = new myGridViewTemplate();

 

        GridView1.Columns.Add(tf);

 

        GridView1.DataBind();

 

        Label1.Text = "Non hai cambiato nessun colore";    

    }  

 

    public class myGridViewTemplate : ITemplate

    {      

 

        public myGridViewTemplate()

        {

         

        }

 

        //Implemento il metodo astratto InstantiateIn dell'Interfaccia ITemplate

        //Questo metodo sar� richiamato automaticamente 

        public void InstantiateIn(System.Web.UI.Control container)

        {        

            DropDownList DrDwL = new DropDownList();

            DrDwL.DataValueField = "Valore";

            DrDwL.DataTextField = "Testo";

            DrDwL.AutoPostBack = true;

            DrDwL.SelectedIndexChanged += new EventHandler(DrDwL_SelectedIndexChanged);

            DrDwL.DataSource = ds;

            DrDwL.ID = "Drdwl";

            DrDwL.AppendDataBoundItems = true;

            container.Controls.Add(DrDwL);           

        }

 

        void DrDwL_SelectedIndexChanged(object sender, EventArgs e)

        {

            ((Label)((DropDownList)sender).Page.FindControl("Label1")).Text = "Hai cambiato colore!";

        }       

    }

}