Archive for February, 2010
Triggering a Specific GridView Row Command When Page Loads
I have an asp.net page with a gridview and each row uses a TemplateField to make a LinkButton to select the row. In my case, the action of clicking the text link triggers a FormView to appear in order to edit the data.
I needed a way to open the editing form automatically for the first item in the gridview when the page loads. After using combinations of different .NET page events (Page_Render(), Page_Unload(), etc.), I found myself going around and around because I was never at the right point in the execution order for getting the data bound , knowing the correct CommandArgument and having access to all the data in the row at the same time. I was setting session variables and checking IsPostBack and it was becoming more complicated than it seemed like it needed to be.
It was time to rethink the whole issue. I ended up writing 1 line of javascript with a little prep C# code which finds the correct LinkButton, transforms its .NET generated ID into something useful, and then stores it for the javascript to use. The javascript executes a postback after the page loads so it mimics a user clicking on the “Edit” link, just like I wanted.
The code for the edit link as a column in my gridview:
<asp:TemplateField ShowHeader=”False”>
<ItemTemplate>
<asp:LinkButton ID=”LinkButtonSelect” runat=”server” CausesValidation=”False”
CommandName=”Select” Text=”EDIT”
CommandArgument=’<%# Bind(“ID”)%>‘>
</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
In my C# code I check if there are any rows in my grid before I attempt to postback on anything and I’m choosing row 0 because I want the first row. The parameter for __doPostBack needs to have dollar signs instead of underscores like the ID has, so I replace them accordingly.
At the bottom of my.aspx page I have this javascript code (which could also be added into the onload event):
<script type=”text/javascript”>
<%
// Get and format the the ID of the Edit link in the first row
if (GridView1.Rows.Count > 0)
{
LinkButton lnkEdit = (LinkButton)GridView1.Rows[0].FindControl(“LinkButtonSelect”);
string strEditID = lnkEdit.ClientID.ToString().Replace(“_”,“$”);
%>
// trigger a postback like someone clicked “Edit”
__doPostBack(‘<%= strEditID %>’, ”);
<%
}
%>
</script>
So in the end, the javascript line has the same value as the href attribute that is generated for the LinkButton. View the source code of your page and check it out!