Row command event of the gridview


Introduction: Hello guys, in this article i will explain that how we can  work with the rowcommand event of the gridview. This article will very helpful for the .net developers.

Implementation: Create a page named rw_commamnd.Place  four textboxes and a button and a gridview. And set their id as txt_name,txt _age,txt_paswrd and txt_repswrd respectively.  


Code for .aspx page:
head runat="server">
    <title>Row command event</title>
 
</head>
<body>
    <form id="form1" runat="server">
    <div>
   
        <table >
            <tr>
                <td>
                    Name</td>
                <td>
                    <asp:TextBox ID="txt_name" runat="server"></asp:TextBox>
                </td>
            </tr>
            <tr>
                <td >
                    Age</td>
                <td>
                    <asp:TextBox ID="txt_age" runat="server"></asp:TextBox>
                </td>
            </tr>
     
            <tr>
                <td >
                    Password</td>
                <td>
                    <asp:TextBox ID="txt_pswrd" runat="server" TextMode="Password"></asp:TextBox>
                </td>
            </tr>
            <tr>
                <td>
                    Retype_password</td>
                <td>
                    <asp:TextBox ID="txt_repswrd" runat="server" TextMode="Password"></asp:TextBox>
                </td>
            </tr>
            <tr>
                <td>
                    &</td>
                <td>
                    <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
                </td>
            </tr>
        </table>
   
    </div>
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
        onrowcommand="GridView1_RowCommand" CellPadding="4" ForeColor="#333333"
        GridLines="None">
        <RowStyle BackColor="#E3EAEB" />
        <Columns>
            <asp:TemplateField HeaderText="Name">
                <ItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%# Eval("Name") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Age">
                <ItemTemplate>
                    <asp:Label ID="Label2" runat="server" Text='<%# Eval("Age") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Login_status">
            <%--here am placing the link button and set its commandargument a id and
            set its commandname as abc and set text with the value that will come inside the
            Login_status columnit can be
             --%>
                <ItemTemplate>
                    <asp:LinkButton ID="LinkButton2" runat="server"
                        CommandArgument='<%#Eval("id") %>' CommandName="abc"
                        Text='<%# Eval("Login_status") %>'></asp:LinkButton>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Password">
                <ItemTemplate>
                    <asp:Label ID="Label4" runat="server" Text='<%# Eval("Password") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Retype_password" >
                <ItemTemplate>
                    <asp:Label ID="Label5" runat="server" Text='<%# Eval("Retype_password") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="delete">
              <%--here am placing the link button and set its commandargument a id and
            set its commandname as del
             --%>
                <ItemTemplate>
               
                    <asp:LinkButton ID="LinkButton3" runat="server"
                        CommandArgument='<%# Eval("id") %>' CommandName="del"
                       
                        onclientclick="confirm return('Are you sure want to delete the current record')">delete</asp:LinkButton>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
        <FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" />
        <SelectedRowStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" />
        <HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
        <EditRowStyle BackColor="#7C6F57" />
        <AlternatingRowStyle BackColor="White" />
    </asp:GridView>
    <br />
    </form>
</body>
</html>
Code for aspx.cs page:

using System;
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 _Default : System.Web.UI.Page
{
    // here i am declaring some object for datatable,SqlConnection,SqlDataAdapter
    SqlConnection con = new SqlConnection();
    SqlDataAdapter adp;
    DataTable dt;
    SqlCommand cmd = new SqlCommand();


    protected void Page_Load(object sender, EventArgs e)
    {
        //  here i am declaring  connectionstring
            con.ConnectionString = ConfigurationManager.ConnectionStrings["con"].ConnectionString;
            con.Open();
            //  here i am open the connection if the connection is closed
           if (con.State == ConnectionState.Closed)
          {
            con.Open();
          }
            con.Close();
         if (IsPostBack == false)
          {
              // here i am calling the function that will bind the gridview
            grd_data();
          }
    }

    private void grd_data()
    {
        // this function will bind the gridview dynamically
         if (con.State == ConnectionState.Closed)
          {
            con.Open();
          }
            adp = new SqlDataAdapter("select * from tb_user order by id asc",con);
            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
            GridView1.DataSource = dt;
            GridView1.DataBind();
            con.Close();
    }


    protected void Button1_Click(object sender, EventArgs e)
    {
          // this code is used to insert the value inside the table
          //  here i am open the connection if the connection is closed
          if (con.State == ConnectionState.Closed)
          {
            con.Open();
          }
         // here m declaring the sql query to inser the values
            cmd.CommandText = "insert into tb_user values(@name,@age,default,@password,@retype_password)";
            cmd.Connection = con;
            // below m declaring the parameters for this insert query
           
            cmd.Parameters.Add("@name", SqlDbType.VarChar, 50).Value = txt_name.Text;
            cmd.Parameters.Add("@age", txt_age.Text);
            cmd.Parameters.Add("@password", SqlDbType.VarChar, 50).Value = txt_pswrd.Text;
            cmd.Parameters.Add("@retype_password", SqlDbType.VarChar, 50).Value = txt_repswrd.Text;
            cmd.ExecuteNonQuery();
            cmd.Dispose();
            txt_name.Text = "";
            txt_age.Text = "";
           
            txt_pswrd.Text = "";
            txt_repswrd.Text = "";
            con.Close();
        // here m calling the function named grd_bind after insertion  this function will call
        // and  display the data with the new row that will insert presently
            grd_data();
    }
   
   
    //GridView-properties-(Events)-Rowcommand-doubleor  click
    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        // this code for  Rowcommand event
            Int32 i;
            // inside the i variable m putting the id that will come inside the CommandArgument
            //inside the source code m binding the CommandArgument with the id
            i = Convert.ToInt32(e.CommandArgument);
        if (con.State == ConnectionState.Closed)
          {
            con.Open();
          }
        // here m checking the commandname of the linkbutton.

        if (e.CommandName == "abc")
       {
            // if the commandname will abc then this condition will work
           // here m selecting the login_status correspondence of this id
            adp = new SqlDataAdapter("select login_status from tb_user where id=@id", con);
            adp.SelectCommand.Parameters.AddWithValue("@id", i);
            dt = new DataTable();
            adp.Fill(dt);
            adp.Dispose();

            if (dt.Rows[0]["login_status"].ToString() == "No")
          {
              // if the login_status will no then this condition will works
              // and here m updating the the login_status with the value yes
              //
            cmd = new SqlCommand("update tb_user set login_status=@login_status where id=@id", con);
            cmd.Parameters.AddWithValue("@login_status", "Yes");
            cmd.Parameters.AddWithValue("@id", i);
            cmd.ExecuteNonQuery();
            cmd.Dispose();
          }
            else
          {
              // if the login_status will yes then this condition will works
              // and here m updating the the login_status with the value No
            cmd = new SqlCommand("update tb_user set login_status=@login_status where id=@id", con);
            cmd.Parameters.AddWithValue("@login_status", "No");
            cmd.Parameters.AddWithValue("@id", i);
            cmd.ExecuteNonQuery();
            cmd.Dispose();
          }
          
       }
        // here m checking the commandname of the linkbutton.
            if (e.CommandName == "del")
            {
                // if the commandname will abc then this condition will work
                // here m deleting the data from the column correspondence of this id
                cmd = new SqlCommand("delete from tb_user where id=@id", con);
                cmd.Parameters.AddWithValue("@id", i);
                cmd.ExecuteNonQuery();
                cmd.Dispose();
            }


            grd_data();
            con.Close();

    }
}
See output in this image:
See inside the gridview, login_status column.  You can change the status after pressing the no. it changes no to yes ans yes to no






Sql Script for database:
/****** Object:  Default [DF_tb_user_Login_status]    Script Date: 12/04/2011 10:49:24 ******/
IF  EXISTS (SELECT * FROM sys.default_constraints WHERE object_id = OBJECT_ID(N'[dbo].[DF_tb_user_Login_status]') AND parent_object_id = OBJECT_ID(N'[dbo].[tb_user]'))
Begin
ALTER TABLE [dbo].[tb_user] DROP CONSTRAINT [DF_tb_user_Login_status]

End
GO
/****** Object:  Table [dbo].[tb_user]    Script Date: 12/04/2011 10:49:24 ******/
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[tb_user]') AND type in (N'U'))
DROP TABLE [dbo].[tb_user]
GO
/****** Object:  Table [dbo].[tb_user]    Script Date: 12/04/2011 10:49:24 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[tb_user]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[tb_user](
      [id] [int] IDENTITY(1,1) NOT NULL,
      [Name] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
      [Age] [int] NULL,
      [Login_status] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
      [Password] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
      [Retype_password] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
 CONSTRAINT [PK_tb_user] 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].[tb_user] ON
INSERT [dbo].[tb_user] ([id], [Name], [Age], [Login_status], [Password], [Retype_password]) VALUES (2, N'vikram', 30, N'Yes', N'vikram', N'vikram')
INSERT [dbo].[tb_user] ([id], [Name], [Age], [Login_status], [Password], [Retype_password]) VALUES (3, N'Bharat', 23, N'No', N'bharat', N'bharat')
SET IDENTITY_INSERT [dbo].[tb_user] OFF
/****** Object:  Default [DF_tb_user_Login_status]    Script Date: 12/04/2011 10:49:24 ******/
IF Not EXISTS (SELECT * FROM sys.default_constraints WHERE object_id = OBJECT_ID(N'[dbo].[DF_tb_user_Login_status]') AND parent_object_id = OBJECT_ID(N'[dbo].[tb_user]'))
Begin
ALTER TABLE [dbo].[tb_user] ADD  CONSTRAINT [DF_tb_user_Login_status]  DEFAULT ('No') FOR [Login_status]

End
GO
Conclusion
Through this article, you have learned how to work  rowcommand event inside the gridview.



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.