Every once in a while you have a list of records that need to be “approved by a manager.” You could select the records via a filter, but that always gets a little cumbersome because there’s always one record you have to then individually “un-approve” in order to get it just right.
In this example we put a CheckBox on each row, allow the user to select whichever records they want to approve and then approve them with the click of a button.
1) Build your GridView and display your data. The following code only applies to the current page, so if your GridView allows paging you will want to balance between showing too many records versus showing enough records for an efficient approval process. Make sure you set the DataKeyNames field to your Table’s Identity field.
2) Add the following row to your GridView:
<asp:TemplateField> <ItemTemplate> <asp:CheckBox runat="server" ID="chkApprove" /> </ItemTemplate> </asp:TemplateField>
3) Add a button to your page
<asp:Button runat="server" ID="btnApprove" Text="Approve Selected" />
4) Add the code to iterate through the GridView records to the Button Click event.
Protected Sub btnApprove_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnApprove.Click 01 Try 02 For Each row As GridViewRow In grdContent.Rows 03 If row.RowType = DataControlRowType.DataRow Then 04 Dim cChk As CheckBox = CType(row.FindControl("chkApprove"), CheckBox) 05 If cChk.Checked Then 06 ApproveMyRecord(grdContent.DataKeys(row.RowIndex).Value) 07 End If 08 End If 09 Next 10 Catch ex As Exception 11 lblMsg.Text = "Approve error: " & ex.Message 12 End Try End Sub
Breakdown:
Lines 01, 10-12: Basic Try/Catch error trapping routine. The lblMsg control is arbitrary. Display errors as you see fit.
Lines 02, 03, 08, 09: We are iterating through every displayed row in the GridView and checking for DataControlRowType.DataRow rows (this will exclude header and footer rows).
Line 04: Create a CheckBox variable and assign the row checkbox to it.
Line 05, 07: Check to see if the CheckBox is checked and if not, skip it.
Line 06: This is where you run the code to approve the individual record. Grab the record ID from the DataKeys using the RowIndex value.
You can improve this code by collecting the ID’s and sending them to a Stored Procedure as a list and reducing the number of calls to the database.