Hi, I have a radgrid with GridTemplateColumn whic has checkbox 2 textboxes and datepicker.
Is there a way to know if user has edited a value in one of those controls ?
I need to know which row is updated and get old/new values.
Thanks
Is there a way to know if user has edited a value in one of those controls ?
I need to know which row is updated and get old/new values.
Thanks
5 Answers, 1 is accepted
0
Princy
Top achievements
Rank 2
answered on 12 Apr 2012, 08:40 AM
Hi Avetik,
Please take a look into the following code I tried.
ASPX:
C#:
Hope this helps.
Thanks,
Princy.
Please take a look into the following code I tried.
ASPX:
<telerik:RadGrid ID="RadGrid1" runat="server"onneeddatasource="RadGrid1_NeedDataSource"onupdatecommand="RadGrid1_UpdateCommand" AutoGenerateColumns="false"AutoGenerateEditColumn="true" onitemdatabound="RadGrid1_ItemDataBound"> <MasterTableView DataKeyNames="EmployeeID"> <Columns> <telerik:GridTemplateColumn> <EditItemTemplate> <asp:CheckBox ID="Check" runat="server" Checked='<%#Eval("IsActive") %>' /> <asp:TextBox ID="TextBox1" runat="server" Text='<%#Eval("LastName") %>'></asp:TextBox> <asp:TextBox ID="TextBox2" runat="server" Text='<%#Eval("EmployeeID") %>'></asp:TextBox> <telerik:RadDatePicker ID="RadDatePicker1" runat="server"></telerik:RadDatePicker> </EditItemTemplate> </telerik:GridTemplateColumn> </Columns> </MasterTableView></telerik:RadGrid>C#:
public static string connection = WebConfigurationManager.ConnectionStrings["NorthwindConnectionString3"].ConnectionString;SqlConnection conn = new SqlConnection(connection);public SqlCommand SqlCommand = new SqlCommand();protected void RadGrid1_NeedDataSource(object sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e){ string selectFilterQuery = "select top 5 * from [Employees]"; SqlCommand.CommandText = selectFilterQuery; SqlDataAdapter adapter = new SqlDataAdapter(selectFilterQuery, conn); DataTable dt = new DataTable(); conn.Open(); adapter.Fill(dt); conn.Close(); RadGrid1.DataSource = dt;}protected void RadGrid1_UpdateCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e){ GridEditableItem editItem = (GridEditableItem)e.Item; string DataKeyName = editItem.OwnerTableView.DataKeyValues[editItem.ItemIndex]["EmployeeID"].ToString(); // You will get the DataKeyName int rowindex = editItem.ItemIndex; //Row index to identify the row edited String OldValue=(string)Session["savedOldValue"]; // you will get the Old Value TextBox LastName = (TextBox)editItem.FindControl("TextBox1"); string newLastName = LastName.Text; // new value TextBox EmployeeID = (TextBox)editItem.FindControl("TextBox2"); string newEmployeeID = EmployeeID.Text.ToString(); CheckBox Check = (CheckBox)editItem.FindControl("Check"); string value = Check.Checked.ToString(); string updateQuery = "Update Employees set EmployeeID='" + newEmployeeID + "',LastName='" + newLastName + "',IsActive='" + value + "'"; conn.Open(); SqlCommand.CommandText = updateQuery; SqlCommand.Connection = conn; SqlCommand.ExecuteNonQuery(); conn.Close();}protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e){ if (e.Item is GridEditableItem && e.Item.IsInEditMode) { TextBox txtBox = e.Item.FindControl("TextBox1") as TextBox; Session["savedOldValue"] = txtBox.Text; }}Hope this helps.
Thanks,
Princy.
0
Avetik
Top achievements
Rank 1
answered on 12 Apr 2012, 04:48 PM
Hi Princy,
Thank you for the answer. Actually it will not help ... as I have the controls to be edited in place without opening edit panel.
Lets say I have ID and Name fields. ID is just a GridBoundColumn and the Name is defined like this :
So I want to get the ID if all rows for which Name was changed.
Thanks
Thank you for the answer. Actually it will not help ... as I have the controls to be edited in place without opening edit panel.
Lets say I have ID and Name fields. ID is just a GridBoundColumn and the Name is defined like this :
<telerik:GridTemplateColumn HeaderText="Name" UniqueName="Name"<br> meta:resourcekey="NameResource" HeaderStyle-Width="100px">
<ItemTemplate>
<telerik:RadTextBox ID="Name" runat="server" DbValue='<%# Eval("Name") %>'> </RadTextBox>
</ItemTemplate>
</telerik:GridTemplateColumn>
So I want to get the ID if all rows for which Name was changed.
Thanks
0
Elliott
Top achievements
Rank 2
answered on 13 Apr 2012, 07:12 PM
try adding an OnTextChanged event handler to the RadTextBox
cast the sender to RadTextBox, then use NamingContainer as a GridDataItem
I did something similar only on the Edit Item
cast the sender to RadTextBox, then use NamingContainer as a GridDataItem
I did something similar only on the Edit Item
0
Princy
Top achievements
Rank 2
answered on 21 Apr 2012, 06:34 AM
Hi,
Try OnTextChanged event of RadTextBox as Marianne Seggerman suggested. Here is the code I tried, please take a look into the following code snippet.
ASPX:
C#:
Thanks,
Princy.
Try OnTextChanged event of RadTextBox as Marianne Seggerman suggested. Here is the code I tried, please take a look into the following code snippet.
ASPX:
<telerik:GridTemplateColumn HeaderText="Name" UniqueName="Name"><ItemTemplate> <telerik:RadTextBox ID="Name" runat="server" Text='<%# Eval("ShipName") %>' AutoPostBack="true" ontextchanged="Name_TextChanged"></telerik:RadTextBox></ItemTemplate></telerik:GridTemplateColumn>C#:
protected void Name_TextChanged(object sender, EventArgs e){ RadTextBox txtbox = (RadTextBox)sender; GridEditableItem item = (GridEditableItem)txtbox.NamingContainer; int keyValue = Convert.ToInt32(item.GetDataKeyValue("OrderID").ToString());}Thanks,
Princy.
0
Avetik
Top achievements
Rank 1
answered on 30 May 2012, 07:51 PM
Thank you for feedback. I found workaround :) with having some kind of a observable data structure.