Wednesday, 16 November 2011

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.



1 comment: