Solved

Button to update row in gridview

Posted on 2012-03-21
8
381 Views
Last Modified: 2012-03-21
I am new to asp.net and I am hoping you can help with a question on gridview controls.   I have a gridview control that shows a list of transactions.   I have added two buttons (Approve/Rescind) to the gridview that I would like to update a field on the record.   There is a SQL data source that is attached to the gridview control and I have created two separate SQL data sources with the appropriate update statements for the updating the field.  I have assigned the buttons with CommandName attributes of "Approve" and "Rescind" respectively.   A couple of questions...

1.  There is a transaction ID in the select statement used by the gridview.   It is the primary key for the table and I would need to use this for my update statement.  How do I get the transaction id associated with the buttons on a given row?  

2.  How would I initiate the update (assume this is done in the C# code)?

Thank you!
John
0
Comment
Question by:jzlamal
  • 4
  • 3
8 Comments
 
LVL 20

Expert Comment

by:BuggyCoder
ID: 37747032
0
 
LVL 38

Expert Comment

by:Tom Beck
ID: 37747123
How do I get the transaction id associated with the buttons on a given row?  

Add a CommandArgument attribute to the button to hold the transaction ID.

<asp:Button ID="btnTest" Text="Approve" runat="server" CommandName="Approve" CommandArgument='<%# Bind("transactionid") %>' OnCommand="btnTest_Command" />

Handle the update on the button click, retrieve the transaction id from the CommandArgument.
protected void btnTest_Command(object sender, CommandEventArgs e)
        {
            if (e.CommandName == "Approve")
            {
                string transactionId = (string)e.CommandArgument;
                //Update the database
            }
        }

Open in new window

0
 

Author Comment

by:jzlamal
ID: 37747153
I tried your suggestion and I received the following...

System.Web.UI.WebControls.DataControlFieldCollection must have items of type 'System.Web.UI.WebControls.DataControlField'. 'asp:Button' is of type 'System.Web.UI.WebControls.Button'

Is the Button field you provided appropriate for adding inside a gridview control or do I need to use something else?

Thanks!
john
0
Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

 
LVL 38

Accepted Solution

by:
Tom Beck earned 500 total points
ID: 37747162
The asp:Button would need to be inside an asp:TemplateField.

         <asp:TemplateField>
            <ItemTemplate>                
                <asp:Button ID="btnTest" Text="Approve" runat="server" CommandName="Approve" CommandArgument='<%# Bind("transactionid") %>' OnCommand="btnTest_Command" />
            </ItemTemplate>
        </asp:TemplateField>
0
 

Author Comment

by:jzlamal
ID: 37747288
Ok.  So the transaction ID is being passed when I click on the button.   However, it is not being passed along to the update statement.   In the btnTest_Command, I am calling the Update method of the SQL Datasource using "UpdApprove.Update()".   I have a SQL Data source defined as:

<asp:SqlDataSource ID="UpdApprove" runat="server"
        ConnectionString="<%$ ConnectionStrings:PMMARTConnectionString %>"
        UpdateCommand="UPDATE [TT_TRANS] SET [ApprovedFlag] = 'Y', [ApprDate] = getdate() WHERE [TranID] = @TranID">
        <UpdateParameters>
            <asp:Parameter Name="TranID" Type="String" />
        </UpdateParameters>
    </asp:SqlDataSource>

Do I need to do anything else to pass the transactionID from the btnTest_Command to the SQLDataSource?   Even though the button is getting the correct transaction id, it doesn't seem to be passing it along to the update statement.  Thanks!
0
 

Author Closing Comment

by:jzlamal
ID: 37747422
Once I added a line to update the UpdateParameter, everything worked.   Thank you so much!
0
 
LVL 38

Expert Comment

by:Tom Beck
ID: 37747484
You are revealing new circumstances that were not part of your original question. The method I presented assumed that you were manually updating your database. If you are using all the built-in mechanisms for populating/updating a Gridview then disregard my suggestion. There are multiple ways to do this. You could specify an OnRowUpdating event in your GridView markup.

<asp:GridView ID="GridView1" OnRowUpdating="GridView1_RowUpdating"....

You could add DataKeyNames to get the transaction ids.

...DataKeyNames="transactionid" >

Then in the <columns> block you could include a command field.

<asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />

When a user clicks the Edit link, in code behind, switch to Update mode.
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
        {
            GridView1.EditIndex = e.NewEditIndex; // turn to edit mode
            BindGridView(); // Rebind GridView to show the data in edit mode
        }

Open in new window


This should change your BoundFields to textboxes and the Edit/Delete link to Update/Cancel.

User makes changes and clicks Update link

Then in the RowUpdating event.
protected void gridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
             string transactionId = (string)GridView1.DataKeys[0].Value;
             //Use the DataKey as the Update statement parameter
        }

Open in new window


But, like I said, there are many possibilities.
0
 
LVL 38

Expert Comment

by:Tom Beck
ID: 37747501
Our posts crossed. Thanks for the points. Glad to help.
0

Featured Post

Free Tool: Postgres Monitoring System

A PHP and Perl based system to collect and display usage statistics from PostgreSQL databases.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Just a quick little trick I learned recently.  Now that I'm using jQuery with abandon in my asp.net applications, I have grown tired of the following syntax:      (CODE) I suppose it just offends my sense of decency to put inline VBScript on a…
This article discusses the ASP.NET AJAX ModalPopupExtender control. In this article we will show how to use the ModalPopupExtender control, how to display/show/call the ASP.NET AJAX ModalPopupExtender control from javascript, how to show/display/cal…
Microsoft Active Directory, the widely used IT infrastructure, is known for its high risk of credential theft. The best way to test your Active Directory’s vulnerabilities to pass-the-ticket, pass-the-hash, privilege escalation, and malware attacks …
This video shows how to quickly and easily add an email signature for all users on Exchange 2016. The resulting signature is applied on a server level by Exchange Online. The email signature template has been downloaded from: www.mail-signatures…

840 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question