Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 408
  • Last Modified:

Button to update row in gridview

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
jzlamal
Asked:
jzlamal
  • 4
  • 3
1 Solution
 
BuggyCoderCommented:
0
 
Tom BeckCommented:
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
 
jzlamalAuthor Commented:
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
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 
Tom BeckCommented:
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
 
jzlamalAuthor Commented:
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
 
jzlamalAuthor Commented:
Once I added a line to update the UpdateParameter, everything worked.   Thank you so much!
0
 
Tom BeckCommented:
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
 
Tom BeckCommented:
Our posts crossed. Thanks for the points. Glad to help.
0

Featured Post

VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

  • 4
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now