the 2 grids are filled by the same data; but Grid 1 is binded automatically via an SQLDataSource, and Grid 2 is binded manually in my vb code.
I have a created a procedure to handle the update command of each grid.
The update event for grid 1 is executed successfully.
The update event for grid does not execute any statement of the procedure which makes me think that the i have to do something different for cases when a grid is binded manually:
For the record:
- all grids are using templates that are identical.
- the templates have buttons that are set to Update Command.
Can someone help me with this?
5 Answers, 1 is accepted
I assume that you are binding the grid in PageLoad event, which is Simple data binding technique. If you are using any advanced feature in grid(like insert/update/delete), then a better approach is using "AdvancedData binding" using NeedDataSource event.
For more information about this can be available here.
Advanced Data-binding (using NeedDataSource event)
Here is the sample code that I tried in my application for manual update operation.
ASPX:
<telerik:RadGrid ID="RadGrid1" AutoGenerateColumns="False" runat="server" OnNeedDataSource="RadGrid1_NeedDataSource" OnUpdateCommand="RadGrid1_UpdateCommand"> <MasterTableView CommandItemDisplay="Top" DataKeyNames="EmployeeID"> <Columns> <telerik:GridTemplateColumn> <ItemTemplate> <asp:Label ID="Label1" runat="server" Text='<%#Eval("FirstName") %>'></asp:Label> </ItemTemplate> <EditItemTemplate> <asp:TextBox ID="TextBox1" runat="server" Text='<%#Bind("FirstName") %>'></asp:TextBox> </EditItemTemplate> </telerik:GridTemplateColumn> <telerik:GridTemplateColumn> <ItemTemplate> <asp:LinkButton ID="btnEdit" runat="server" CommandName="Edit">Edit</asp:LinkButton> </ItemTemplate> </telerik:GridTemplateColumn> </Columns> </MasterTableView></telerik:RadGrid>C#:
protected void RadGrid1_NeedDataSource(object sender, GridNeedDataSourceEventArgs e) { //populate RadGrid } protected void RadGrid1_UpdateCommand(object sender, GridCommandEventArgs e) { GridEditFormItem editItem = (GridEditFormItem)e.Item; TextBox txtname = (TextBox)editItem.FindControl("TextBox1"); int id =Convert.ToInt32(editItem.GetDataKeyValue("EmployeeID")); SqlConnection con = new SqlConnection(WebConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString); SqlCommand cmd = new SqlCommand("Update Employees set FirstName=@FirstName where EmployeeID=@EmployeeID ", con); cmd.Parameters.Add(new SqlParameter("@EmployeeID", id )); cmd.Parameters.Add(new SqlParameter("@FirstName", txtname.Text)); con.Open(); cmd.ExecuteNonQuery(); con.Close(); RadGrid1.Rebind(); }Could you please paste the complete code if it doesn't help?
Thanks,
Princy.
the problematic grid is bound via "NeedDatasource" event.
I'm loosing hope about being able to manually update a grid that is manually bound.
I added a 3rd grid which is bound automatically via an SQL data source. for that one, the update event fires but the template controls that are for the update are not accessed. here is my code below for the update command
Protected Sub RadGrid1_UpdateCommand(ByVal source As Object, ByVal e As Telerik.Web.UI.GridCommandEventArgs) Handles RadGrid1.UpdateCommand
Try
Dim the_edited_row As GridEditFormItem = CType(e.Item, GridEditFormItem)
Dim theMailMessage As MailMessage = New MailMessage("someone@something.com", "someone@something.com", "Working", "Working")
Dim theClient As SmtpClient = New SmtpClient(ConfigurationManager.AppSettings("SMTPServer").ToString)
theClient.Send(theMailMessage)
Catch
Dim theMailMessage As MailMessage = New MailMessage("someone@something.com", "someone@something.com", "Not Working", "Not Working")
Dim theClient As SmtpClient = New SmtpClient(ConfigurationManager.AppSettings("SMTPServer").ToString)
theClient.Send(theMailMessage)
End Try
End sub
I always receive the "Not Working" mail which means that the edit form is not casted. why would that be?
I guess you are using 'InPlace' edit mode. If so change the edit item in UpdateCommand like below and check whether it works now.
VB.NET:
Protected Sub RadGrid1_UpdateCommand(sender As Object, e As GridCommandEventArgs) Try Dim editItem As GridEditableItem = DirectCast(e.Item, GridEditableItem) ' . . . . . . . . . Catch End TryEnd SubThanks,
Princy.
I figured what the problem is.
When my grid goes into edit mode.
e.item is not a grideditformitem or grideditableitem.
It's just a griddataitem and when trying to convert it to either a grideditform or grideditableitem (via DirectCast or Ctype) the conversion fails.
Do you have any idea why the e.item does not become and editable item (grideditform or grideditableitem) in edit mode?
Dim edititem As GridEditFormItem = DirectCast(TryCast(e.Item, GridDataItem).EditFormItem, GridEditFormItem)