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.