Wednesday, August 20, 2008

Select GridView Row on Double Click

Start with an existing GridView that is populated from a data source In the ItemDataBound event handler of GridView, you assign a JavaScript ondblclick method to the GridViewRow
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="GridViewDblClick.aspx.cs"
   Inherits="GridViewDblClick" %>

<!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:GridView ID="GridView1" runat="Server" OnRowDataBound="GridView1_RowDataBound">
           </asp:GridView>
       </div>
   </form>
</body>
</html>
using System;
using System.Data;
using System.Configuration;
using System.Collections;
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 GridViewDblClick : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
      

        //Insure that the __doPostBack() JavaScript method is created...
        this.ClientScript.GetPostBackEventReference(this, string.Empty);
        if (!IsPostBack)
        {

            BindGridViewView();
        }
        else
        {
            if (!(Request.Form["_EventTarget"] != null && Request.Form["_EventTarget"] == "myDblclick"))
            {
                GridView1.SelectedIndex = int.Parse(Request.Form["__EVENTARGUMENT"].ToString());
                Response.Write(Request.Form["__EVENTARGUMENT"].ToString());


            }


        }
    }
    private void BindGridViewView()
    {
        if (Session["strTemp"] != null)
        {

            GridView1.DataSource = Session["strTemp"] as DataTable;
            GridView1.DataBind();

        }
        else
        {
            GridView1.DataSource = GetCustomMadeDataTable();
            GridView1.DataBind();
        }
    }
    public DataTable GetCustomMadeDataTable()
    {
        //Create a new DataTable object
        System.Data.DataTable objDataTable = new System.Data.DataTable();
        //Create three columns with string as their type
        objDataTable.Columns.Add("ISBN", typeof(string));
        objDataTable.Columns.Add("Title", typeof(string));
        objDataTable.Columns.Add("Publisher", typeof(string));
        objDataTable.Columns.Add("Year", typeof(string));
        DataColumn[] dcPk = new DataColumn[1];
        dcPk[0] = objDataTable.Columns["ISBN"];
        objDataTable.PrimaryKey = dcPk;
        objDataTable.Columns["ISBN"].AutoIncrement = true;
        objDataTable.Columns["ISBN"].AutoIncrementSeed = 1;
        //Adding some data in the rows of this DataTable
        DataRow dr;
        for (int i = 1; i <= 5; i++)
        {
            dr = objDataTable.NewRow();
            dr[1] = "Title" + i.ToString();
            dr[2] = "Publisher" + i.ToString();
            dr[3] = "200" + i.ToString();
            objDataTable.Rows.Add(dr);
        }
        for (int i = 6; i <= 8; i++)
        {
            dr = objDataTable.NewRow();
            dr[1] = "Computer" + i.ToString();
            dr[2] = "TMH" + i.ToString();
            dr[3] = "200" + i.ToString();
            objDataTable.Rows.Add(dr);
        }
        Session["strTemp"] = objDataTable;
        return objDataTable;
    }
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            //Each row will then behave like a link, and when you select one it
            //can drive the behavior of another control(s) on your page
            //other way to select
            //e.Row.Attributes["ondblclick"] = ClientScript.GetPostBackClientHyperlink(this.GridView1, "Select$" + e.Row.RowIndex);

            e.Row.Attributes["onmouseover"] = "this.style.cursor='hand';this.style.textDecoration='underline';this.style.color='red'";
            e.Row.Attributes["onmouseout"] = "this.style.textDecoration='none';this.style.color='black';";
            e.Row.Attributes.Add("ondblclick", "Javascript:__doPostBack('myDblClick','" + e.Row.RowIndex + "');");

        }
    }
}

5 comments :

  1. Thanks for this it was really helpful. I think theres a few typos in the code though. The case is different on the spellings of myDblClick and i think you need two underscores on __EventTarget.

    I'm also not sure about the logic of the IF statement that checks __EventTarget. I don't think you need the NOT operator.

    Got it working for me. Thanks again.

    ReplyDelete
  2. Even to me it was really help full. This initiative is enough for a developer. Thanks a lot. Just keep going on Mr./Ms. ?

    ReplyDelete
  3. This post was really useful. Thanks a lot.

    ReplyDelete
  4. This code is so 2008. ;-)

    ReplyDelete
  5. Thanks. I was struggling for this functionality for last 1 week, Now I got the solution. Thank you so much.

    ReplyDelete