Click here to Skip to main content
15,878,871 members
Please Sign up or sign in to vote.
2.00/5 (1 vote)
See more:
how dynamically create a LABEL IN GRID VIEW
Posted

 
Share this answer
 
Comments
UJimbo 15-Jul-11 5:25am    
Fix your link, it opens a blank page :)
Please make yourself more Clear.

You can use the RowDataBound or RowCreated event of Gridview.
 
Share this answer
 
You would need to put some control creation logic inside the GridView.OnRowCreated Method of gridview. please see the link below which will help you to implement it,

GridView.OnRowCreated Method[^]

Hope it helps :)
 
Share this answer
 
 public class DynamicGridViewTextTemplate : ITemplate

{

    string _ColName;

    DataControlRowType _rowType;

    int _Count;

    public DynamicGridViewTextTemplate(string ColName, DataControlRowType RowType)

    {

        _ColName = ColName;

        _rowType = RowType;

    }

    public DynamicGridViewTextTemplate(DataControlRowType RowType, int ArticleCount)

    {

        _rowType = RowType;

        _Count = ArticleCount;

    }

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

    {

        switch (_rowType)

        {

            case DataControlRowType.Header:

                Literal lc = new Literal();

                lc.Text = "<b>" + _ColName + "</b>";

                container.Controls.Add(lc);

                break;

            case DataControlRowType.DataRow:              

                 Label lbl = new Label();

                 lbl.DataBinding += new EventHandler(this.lbl_DataBind);

                 container.Controls.Add(lbl);              

                break;

            case DataControlRowType.Footer:

                Literal flc = new Literal();

                flc.Text = "<b>Total No of Articles:" + _Count + "</b>";

                container.Controls.Add(flc);

                break;

            default:

                break;

        }

    }

 

  

    private void lbl_DataBind(Object sender, EventArgs e)

    {

        Label lbl  = (Label)sender;

        GridViewRow row = (GridViewRow)lbl.NamingContainer;

        lbl.Text =DataBinder.Eval(row.DataItem, _ColName).ToString();

    }

 

}

public class DynamicGridViewURLTemplate : ITemplate

{

    string _ColNameText;

    string _ColNameURL;

    DataControlRowType _rowType;

 

    public DynamicGridViewURLTemplate(string ColNameText, string ColNameURL, DataControlRowType RowType)

    {

        _ColNameText = ColNameText;

        _rowType = RowType;

        _ColNameURL = ColNameURL;

    }

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

    {

        switch (_rowType)

        {

            case DataControlRowType.Header:

                Literal lc = new Literal();

                lc.Text = "<b>" + _ColNameURL + "</b>";

                container.Controls.Add(lc);

                break;

            case DataControlRowType.DataRow:

                HyperLink hpl = new HyperLink();

                hpl.Target = "_blank";

                hpl.DataBinding += new EventHandler(this.hpl_DataBind);

                container.Controls.Add(hpl);

                break;

            default:

                break;

        }

    }

 

    private void hpl_DataBind(Object sender, EventArgs e)

    {

        HyperLink hpl = (HyperLink)sender;

        GridViewRow row = (GridViewRow)hpl.NamingContainer;

        hpl.NavigateUrl = DataBinder.Eval(row.DataItem, _ColNameURL).ToString();

        hpl.Text = "<div class=\"Post\"><div class=\"PostTitle\">" + DataBinder.Eval(row.DataItem, _ColNameText).ToString() + "</div></div>";

    }

}

 
	

Using the Template Class in GridView

Using dynamic template in gridview is slightly different from datalist i.e. we will create the dynamic gridview in column wise with header template, item template and footer template from the first column till the last.

Steps:

1.      Create a Gridview Object.

2.      Create an instance of TemplateField object.

3.      Instantiate the Dynamic template class with proper ListItemType and assign it to corresponding template property of TemplateField object and finally add this object to the column collection of GridView. Refer the below code for better understanding.

Templates of GridView

TemplateField tf = new TemplateField();

                tf.HeaderTemplate = new DynamicGridViewTextTemplate("ArticleID", DataControlRowType.Header);

                tf.ItemTemplate = new DynamicGridViewTextTemplate("ArticleID", DataControlRowType.DataRow);

                tf.FooterTemplate = new DynamicGridViewTextTemplate(DataControlRowType.Footer, ds.Tables[i].Rows.Count);            

 

If you compare the implementation of DataList, in Gridview we won’t create dynamic template for the grid instead we create it for the grid’s column (TemplateField). Refer the below code (Using Template class) for clear understanding.

Using Template class

for (int i = 0; i < ds.Tables.Count; i++)

        {

            if (ds.Tables[i].Rows.Count > 0)

            {

                GridView gvDynamicArticle = new GridView();

                gvDynamicArticle.Width = Unit.Pixel(700);

                gvDynamicArticle.BorderWidth = Unit.Pixel(0);

                gvDynamicArticle.Caption = "<div id=\"nifty\" class=\"PostCategory\"> + ds.Tables[i].Rows[0]["Category"].ToString() + " Articles</div>";

                gvDynamicArticle.AutoGenerateColumns = false;

                gvDynamicArticle.ShowFooter = true;

                TemplateField tf = null;

 

                tf = new TemplateField();

                tf.HeaderTemplate = new DynamicGridViewTextTemplate("ArticleID", DataControlRowType.Header);

                tf.ItemTemplate = new DynamicGridViewTextTemplate("ArticleID", DataControlRowType.DataRow);

                tf.FooterTemplate = new DynamicGridViewTextTemplate(DataControlRowType.Footer, ds.Tables[i].Rows.Count);               

              

                gvDynamicArticle.Columns.Add(tf);

 

                tf = new TemplateField();

                tf.HeaderTemplate = new DynamicGridViewTextTemplate("Title", DataControlRowType.Header);

                tf.ItemTemplate = new DynamicGridViewTextTemplate("Title", DataControlRowType.DataRow);

                gvDynamicArticle.Columns.Add(tf);

 

                tf = new TemplateField();

                tf.HeaderTemplate = new DynamicGridViewTextTemplate("Description", DataControlRowType.Header);

                tf.ItemTemplate = new DynamicGridViewTextTemplate("Description", DataControlRowType.DataRow);

                gvDynamicArticle.Columns.Add(tf);

 

                tf = new TemplateField();

                tf.HeaderTemplate = new DynamicGridViewURLTemplate("Title", "URL", DataControlRowType.Header);

                tf.ItemTemplate = new DynamicGridViewURLTemplate("Title", "URL", DataControlRowType.DataRow);

                gvDynamicArticle.Columns.Add(tf);

 

                tf = new TemplateField();

                tf.HeaderTemplate = new DynamicGridViewTextTemplate("Author", DataControlRowType.Header);

                tf.ItemTemplate = new DynamicGridViewTextTemplate("CreatedBy", DataControlRowType.DataRow);

                gvDynamicArticle.Columns.Add(tf);

 

 

                gvDynamicArticle.RowDataBound += new GridViewRowEventHandler(this.DynamicGrid_RowDataBound);

 

                gvDynamicArticle.DataSource = ds.Tables[i];

                gvDynamicArticle.DataBind();

                phDynamicGridHolder.Controls.Add(gvDynamicArticle);

            }

        }
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900