jzlamal
asked on
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
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
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
}
}
ASKER
I tried your suggestion and I received the following...
System.Web.UI.WebControls. DataContro lFieldColl ection must have items of type 'System.Web.UI.WebControls .DataContr olField'. '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
System.Web.UI.WebControls.
Is the Button field you provided appropriate for adding inside a gridview control or do I need to use something else?
Thanks!
john
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
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:PMMARTCo nnectionSt ring %>"
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!
<asp:SqlDataSource ID="UpdApprove" runat="server"
ConnectionString="<%$ ConnectionStrings:PMMARTCo
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!
ASKER
Once I added a line to update the UpdateParameter, everything worked. Thank you so much!
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_R owUpdating "....
You could add DataKeyNames to get the transaction ids.
...DataKeyNames="transacti onid" >
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.
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.
But, like I said, there are many possibilities.
<asp:GridView ID="GridView1" OnRowUpdating="GridView1_R
You could add DataKeyNames to get the transaction ids.
...DataKeyNames="transacti
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
}
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
}
But, like I said, there are many possibilities.
Our posts crossed. Thanks for the points. Glad to help.
http://www.codeproject.com/Articles/24085/Insert-Update-Delete-with-Gridview-simple-way