Contents
If you have ever used the ASP.NET GridView
control (I have only just started learning ASP.NET, so please forgive me, if I get some of the names of things slightly wrong), you will know that the user is able to select rows within the grid. While this is a great feature of the GridView
control, you would normally have to select a row using a CommandField
or a hyperlink column with a CommandName="Select"
property included. This, I think just looks a bit naff.
Surely, there is a better way. Well luckily there is, we can simply use client side JavaScript to do the row selection. That is what this article is all about. The code is minimal, and very easy to understand, but I think it is useful code, and I also think it is something that anyone that works with the GridView
control should know.
I am actually using Microsoft SQL Server 2005, with the attached DEMO app. You will need to change the Web.Config file to point to your own SQL Server installation. For the GridView
data I have chosen to use the master database, dbo.spt_values table, that comes with SQL Server 2005
The master table structure, and the query that the demo app uses are as follows:
It's very easy actually, all we do is use a <asp:SqlDataSource/>
web control to bind to the master database (remember you'll need to change the connection section in the web.config to point at your own database). The GridView
data is obtained using a simple select statement SELECT TOP 5 * FROM dbo.spt_values table
, and then have the GridView
control use this <asp:SqlDataSource/>
. Then we include a <asp:CommandField ShowSelectButton="True" Visible="False" />
field which we set to be invisible.
One more point to note is that the Page must have the following directive set in order to allow the JavaScript postback mechanism that is described below.
So in the page declarations section, ensure the following is set
EnableEventValidation="false"
So that's the ASPX file (web form), but we also need to write some code in the code behind and use a little bit of JavaScript. So the code behind (C# for the attached demo) looks like :
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 grid : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void GridView1_RowDataBound(object sender,
GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Attributes["onmouseover"] =
"javascript:setMouseOverColor(this);";
e.Row.Attributes["onmouseout"] =
"javascript:setMouseOutColor(this);";
e.Row.Attributes["onclick"] =
ClientScript.GetPostBackClientHyperlink
(this.GridView1, "Select$" + e.Row.RowIndex);
}
}
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
TextBox1.Text = GridView1.SelectedRow.Cells[1].Text;
}
}
This works by attaching 2 JavaScripts to the current GridView
row.
- One for
onmouseover
which simply sets the current row to be highlighted a certain color. I chose Yellow, but you can change that. - One for
onmouseout
which simply resets the current row to be the original color
There is also a clever line as given below:
e.Row.Attributes["onclick"] = ClientScript.GetPostBackClientHyperlink
(this.GridView1, "Select$" + e.Row.RowIndex);
This cunningly creates a client hyperlink which posts back the current ASPX web form, using the Select$0
to select row 0 say.
The ASPX pages JavaScript is as follows:
<script language="javascript" type="text/javascript">
var oldgridSelectedColor;
function setMouseOverColor(element)
{
oldgridSelectedColor = element.style.backgroundColor;
element.style.backgroundColor='yellow';
element.style.cursor='hand';
element.style.textDecoration='underline';
}
function setMouseOutColor(element)
{
element.style.backgroundColor=oldgridSelectedColor;
element.style.textDecoration='none';
}
</script>
And that's it. So what we get is now a nice GridView
control, that we select rows with using JavaScript, and it looks like a table, rather than a table plus some nasty SELECT
button, or a hyperlink column (that is only being used as a row selection method anyway).
And that as they say is that. Simple wasn't it. Probably my most simple article yet. But I think it's a useful one, I have always wondered how my online bank did produced such a nice grid.
I would just like to ask, if you liked the article please vote for it, and leave some comments, as it lets me know if the article was at the right level or not, and whether it contained what people need to know.
Well that's it actually. Although the code is very simple, I'm sure you'll agree this JavaScript selection method sure looks better than having a button column, or a hyperlink column to do the row selection. And it's more intuitive, I think. The users simply point and click the row they want, job done.