Create dynamically link inside the gridview


Introduction: Hello guys, in this article i will explain that how we can give the link to the label inside the  gridview. This article is very helpful for the .net developers,

Implementation: Create a page  named grid. Place gridview  at this page.
Code for .aspx page:
<head runat="server">
    <title>Gridview</title>
   
</head>
<body>
    <form id="form1" runat="server">
  
 
                <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
                    BackColor="LightGoldenrodYellow" BorderColor="Tan" BorderWidth="1px"
                    CellPadding="2" ForeColor="Black" GridLines="None">
                    <FooterStyle BackColor="Tan" />
                    <Columns>
                        <asp:TemplateField HeaderText="School Name">
                            <ItemTemplate>
                                <asp:Label ID="lbl_schoolname" runat="server" Text='<%# Eval("schoolname") %>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Address">
                            <ItemTemplate>
                                <asp:Label ID="lbl_address" runat="server" Text='<%# Eval("address") %>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="School Website">
                            <ItemTemplate>
                                <asp:Label ID="lbl_website" runat="server"></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                    <PagerStyle BackColor="PaleGoldenrod" ForeColor="DarkSlateBlue"
                        HorizontalAlign="Center" />
                    <SelectedRowStyle BackColor="DarkSlateBlue" ForeColor="GhostWhite" />
                    <HeaderStyle BackColor="Tan" Font-Bold="True" />
                    <AlternatingRowStyle BackColor="PaleGoldenrod" />
                </asp:GridView>
               
               
               
       
      
   
</form>
</body>

Code for aspx.cs page:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;

public partial class viewstate : System.Web.UI.Page
{
    // here i am declaring some object for datatable,SqlConnection,SqlDataAdapter
    DataTable dt;
    SqlConnection cnn = new SqlConnection();
    SqlDataAdapter adp;
    protected void Page_Load(object sender, EventArgs e)
    {
        //  here i am declaring  connectionstring
        cnn.ConnectionString = ConfigurationManager.ConnectionStrings["con"].ConnectionString;
        cnn.Open();
        //  here i am open the connection if the connection is closed
        if (cnn.State == ConnectionState.Closed)
        {
            cnn.Open();
        }
        if (Page.IsPostBack == false)
        {
            // here i am calling the function that will bind the gridview
            grd_bind();
        }
    }


    private void grd_bind()
    {
        // inside the table there are many  schools those have website and there are some schools  those have no webdsite.
        // so at below i m  using case statement in the sql query. if any school have website then school_website retun value 'view site'
        // otherwise school_website retun value 'N.A' means not available
 adp = new SqlDataAdapter(@"select schoolname ,address,
( case when website='' then 'NA'else 'View Site'  end ) as  school_website,
 website  from school", cnn);
             
        dt = new DataTable();
        // here i m filling the dt with the values those will come inside the SqlDataAdapter adp
        adp.Fill(dt);
        adp.Dispose();
        // here i am checking the rows those will come inside the dt
        if (dt.Rows.Count == 0)
          {
              // if  there will be no any row come inside the dt then GridView1.Visible=false
             GridView1.Visible = false;
                   
          }
          else
          {
              // if  there will any row come  inside the dt then gridview's visible will true and
            // here i am binding  the gridview with the dt
              GridView1.Visible = true;
              GridView1.DataSource = dt;
              GridView1.DataBind();
              // here i am using the for loop to display the value inside the label that will come inside the school_website colimn
              Int32 i;
              for (i = 0; i <= dt.Rows.Count - 1; i++)
              {
                  // this for loop  come the no of the times. this no: depends on the value comes inside the Rows.Count
                  // here i am declaring a string variable named website
                  // and m binding this variable with the value that will come inside the school_website column
                  // there will be two types of the value 'N.A' or 'viewsite'
                  String website = (dt.Rows[i]["school_website"].ToString());

                  if (website == "View Site")
                  {
                      //if inside the website 'view site' will come then this condition will work
                      // here i am finding the label from the gridview and bind the label with the value come inside the
                      //website means 'view Site' and attaching the <a> tag and givind the path that will come
                      // inspde the website column  of the table
                       ((Label)GridView1.Rows[i].FindControl("lbl_website")).Text = "<a href=" + dt.Rows[i]["website"].ToString() + " target=_blank>" + dt.Rows[i]["school_website"].ToString() + "</a>";
                  }
                  else if (website == "NA")
                  {
                      //if inside the website 'N.A' will come then this condition will work
                      // bind the label with the 'N.A' and there will be no <a> with this
                      ((Label)GridView1.Rows[i].FindControl("lbl_website")).Text = dt.Rows[i]["school_website"].ToString();
                  }
              }   
          }
    }
}
 See output in this image:






Sql Script for database:
/****** Object:  Table [dbo].[school]    Script Date: 11/16/2011 23:49:53 ******/
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[school]') AND type in (N'U'))
DROP TABLE [dbo].[school]
GO
/****** Object:  Table [dbo].[school]    Script Date: 11/16/2011 23:49:53 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[school]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[school](
      [id] [int] IDENTITY(1,1) NOT NULL,
      [schoolname] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
      [address] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
      [website] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
 CONSTRAINT [PK_school] PRIMARY KEY CLUSTERED
(
      [id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON)
)
END
GO
SET IDENTITY_INSERT [dbo].[school] ON
INSERT [dbo].[school] ([id], [schoolname], [address], [website]) VALUES (1, N'D.A.V', N'Batala', N'http://www.dav.org/')
INSERT [dbo].[school] ([id], [schoolname], [address], [website]) VALUES (2, N'S.L.BAwa', N'Batala', N'http://www.facebook.com/')
INSERT [dbo].[school] ([id], [schoolname], [address], [website]) VALUES (3, N'R.R.Bawa', N'Batala', N'http://www.rrbawa.org/')
INSERT [dbo].[school] ([id], [schoolname], [address], [website]) VALUES (4, N'G.N.D.U', N'Amritsar', N'')
INSERT [dbo].[school] ([id], [schoolname], [address], [website]) VALUES (5, N'D.A.V Collage', N'Amritsar', N'http://www.dav.org/')
INSERT [dbo].[school] ([id], [schoolname], [address], [website]) VALUES (6, N'Sainik Collage', N'Gursadpur', N'')
INSERT [dbo].[school] ([id], [schoolname], [address], [website]) VALUES (7, N'D.A.V Collage', N'Pathankot', N'http://www.aman.org/')
INSERT [dbo].[school] ([id], [schoolname], [address], [website]) VALUES (8, N'D.A.V Collage', N'Batala', N'http://www.usingaspdotnet.blogspot.com/')
INSERT [dbo].[school] ([id], [schoolname], [address], [website]) VALUES (9, N'D.A.V Collage', N'Moga', N'http://www.asp.org/')
INSERT [dbo].[school] ([id], [schoolname], [address], [website]) VALUES (10, N'D.A.V Collage', N'Pathankot', N'http://www.jpj.org/')
INSERT [dbo].[school] ([id], [schoolname], [address], [website]) VALUES (11, N'D.A.V Collage', N'Gursadpur', N'http://www.yahoomail.com/')
SET IDENTITY_INSERT [dbo].[school] OFF


Conclusion
Through this article, you have learned give the link to the label inside the gridview.



Comments

Popular posts from this blog

Sending reset password link for one time use only in asp.net

add delete update inside gridview using store procedure in ASP.NET

Change password using asp.net