ASP.NET Data Web Controls
Kick Start

Resources

Newsletter

About

FAQs
 
ASP.NET Data Web Controls Kick Start
Buy the Book!

5 Stars at Amazon.com!
5-Star Rating at Amazon.com!
Amazon.com ratings updated weekly...

Join WebHost4Life.com

Advertisements
Making Rows in an Editable DataGrid Un-Editable
By: Scott Mitchell | Created: 2003-09-23 | Last Updated: 2003-09-23 | Printer-Friendly Version

To follow along with the book, refer to: Chapter 9, Editing the DataGrid Web Control



As discussed in detail in Chapter 9 of ASP.NET Data Web Controls Kick Start, the DataGrid provides the ability to edit the data in its rows one row at a time. This built-in editing support is relatively easy to implement and can greatly enhance the funtionality of a Web page.

Unfortunately, when using the DataGrid's built-in editing features, there is no property that can be set that indicates that a certain row, or set of rows, should not be editable. For example, consider the case where you are displaying a set of data to a user, but, based on the user, you only want to make certain rows editable. To provide such functionality we have to roll up our sleeves and do a bit of work ourselves.

The first step is to create an event handler for the DataGrid's ItemDataBound event. Then, in this event handler we want to check to see if we are dealing with an item in the DataGrid (i.e., not the header or footer row). If we are dealing with an item (that is, a DataGridItem whose ItemType is either ListItem.Item or ListItem.AlternatingItem), then we can perform our security check. This likely would involve checking some field in the DataGridItem's DataItem property. Finally, if we need to disable editing for this particular row, we simply set the Visibility property of the appropriate DataGrid column's first control to False.

The DataGrid column's whose first control's Visible property is set to False is the EditCommandColumn column. The first (and only) control in the EditCommandColumn for a row that's not being currently edited is the "Edit" LinkButton or Button Web control. By setting this control's Visible property to False, the "Edit" button is not rendered, thereby restricting the user from editing the row. (Note that this is not fool-proof, as a skilled user could create a dummy Web page with identical HTML and then add in the needed HTML by hand. To prevent this, it would be wise to check in the EditCommand event handler that the user has permission to edit the row selected...)

The code to complete this, in both VB.NET and C#, can be seen below. There's also a live demo worth checking out.

Sub dgArticles_DataBound(sender as Object, e as DataGridItemEventArgs) If e.Item.ItemType = ListItemType.Item OR _ e.Item.ItemType = ListItemType.AlternatingItem then If USER CANNOT EDIT THIS ROW then 'Hide the Edit column control e.Item.Cells(0).Controls(0).Visible = False End If End If End Sub
VB

 

void dgArticles_DataBound(object sender, EventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) if (USER CANNOT EDIT THIS ROW) //Hide the Edit column control e.Item.Cells[0].Controls[0].Visible = false; }
C#

 

Be sure to check out the live demo!


Home | FAQs | Articles | About | My Blog | Buy the Book!

Copyright 2006, Scott Mitchell. All Rights Reserved.