Connecting Tech Pros Worldwide Help | Site Map
Reply
 
LinkBack Thread Tools Search this Thread
  #1  
Old June 11th, 2007, 08:29 PM
nateraaaa's Avatar
Expert
 
Join Date: May 2007
Location: Illinois
Posts: 663
Default Using CommandArgument to find the database table record_id for a datagrid row

While working on a recent project I discovered how useful the CommandArgument property can be. I needed to determine the record_id of a row displayed in my datagrid. When the user clicked the Edit ImageButton I needed to redirect the user to the Edit page where the data on the page would be prepopulated with data from the database. I tried several things without success then discovered that the CommandArgument property could be used for this task.

Here is my datagrid
[HTML]<asp:datagrid id="dgReorgs" runat="server" OnSortCommand="dgReorgs_SortCommand" OnPageIndexChanged="dgReorgs_PageIndexChanged"
PagerStyle-HorizontalAlign="Center" PagerStyle-Mode="NumericPages" BorderWidth="0px" CellSpacing="1" CellPadding="2" AllowSorting="True" ShowFooter="True" AutoGenerateColumns="False" PageSize="20"
AllowPaging="True" OnItemCommand="dgReorgs_ItemCommand" PagerStyle-CssClass="PagingLink">
<Columns>
<asp:TemplateColumn>
<HeaderStyle HorizontalAlign="Center"></HeaderStyle>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
<HeaderTemplate>
<asp:ImageButton ID="ibtnAdd" Runat="server" ImageUrl="images/Add.gif" OnClick="ibtnAdd_Click" Visible="False"></asp:ImageButton>
</HeaderTemplate>
<ItemTemplate>
<asp:ImageButton ID="ibtnEdit" Visible="False" Runat="server" ImageUrl="images/Edit.gif" CommandArgument='<%# DataBinder.Eval(Container,"DataItem.record_id")%>' CommandName="Edit">
</asp:ImageButton>&nbsp;
</ItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn DataField="offer_posting_date" SortExpression="offer_posting_date" HeaderText="Offer Posting Date"
DataFormatString="{0:MM/dd/yyyy}" HeaderStyle-Font-Size="10">
<HeaderStyle HorizontalAlign="Center" ForeColor="White" BackColor="Navy"></HeaderStyle>
<ItemStyle HorizontalAlign="Center" BackColor="White"></ItemStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="symbol" SortExpression="symbol" HeaderText="Symbol" HeaderStyle-Font-Size="10">
<HeaderStyle HorizontalAlign="Center" ForeColor="White" BackColor="Navy"></HeaderStyle>
<ItemStyle HorizontalAlign="Center" BackColor="White"></ItemStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="offer_expiration_date" SortExpression="offer_expiration_date" HeaderText="Expiration Date"
DataFormatString="{0:MM/dd/yyyy}" HeaderStyle-Font-Size="10">
<HeaderStyle HorizontalAlign="Center" ForeColor="White" BackColor="Navy"></HeaderStyle>
<ItemStyle HorizontalAlign="Center" BackColor="White"></ItemStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="notes" SortExpression="notes" HeaderText="Notes" HeaderStyle-Font-Size="10">
<HeaderStyle HorizontalAlign="Center" ForeColor="White" BackColor="Navy"></HeaderStyle>
<ItemStyle Width="180px" BackColor="White" Wrap="True"></ItemStyle>
</asp:BoundColumn>
</Columns>
<PagerStyle HorizontalAlign="Center" Mode="NumericPages"></PagerStyle>
</asp:datagrid>[/HTML]

The following statement is the key CommandArgument='<%# DataBinder.Eval(Container,"DataItem.record_id")%>' (see line 12 in the code). NOTE: This statement will not work if the datasource of your datagrid does not contain a record_id column.

Now in the code behind.
I use the ItemCommand event of the datagrid to get the record_id of the row that has been selected for editing. In this event I have to check to see if the Item is part of the datagrid header section or if it is part of the datagrid pager section. If it is not then I can redirect the page to the Edit page and append the record_id as a querystring using e.CommandArgument.
Expand|Select|Wrap|Line Numbers
  1. public void dgReorgs_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
  2. {
  3. if(e.Item.ItemType != ListItemType.Header && e.Item.ItemType != ListItemType.Pager)
  4. {
  5. if(e.CommandName == "Edit")
  6. {
  7. Response.Redirect("EditReorg.aspx?value=" + e.CommandArgument);
  8. }
  9. }
  10. }
Then in the page_load event of the Edit page I will call a query that will get me the data for this row and then prepopulate the controls on the page with data.

I hope this code will help some of you understand how to use the CommandArgument property.

Nathan
Reply



  #2  
Old February 16th, 2008, 09:05 AM
Newbie
 
Join Date: Feb 2008
Posts: 2
Default

it's super.but i need gridview coding.u know the coding post me.
Reply
Reply

Bookmarks

Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On

Popular Articles

What is Bytes?

We are a network of experts and professionals in IT and software development that help one another with answers to tough questions and share insights. Get the best answers to your questions from over 220,662 network members.