I have a radgrid using the built in add/insert/delete functionality. However, I am using a usercontrol in my edit form. The Insert command and cancel command work fine, but if I click to edit a record and then click the update button it delets the record instead of updating it. I am using the following code which I found here.
<
asp:Button
ID
=
"btnUpdate"
Text='<%# (Container is GridEditFormInsertItem) ? "Insert" : "Update" %>'
runat="server" CommandName='<%# (Container is GridEditFormInsertItem) ? "PerformInsert" : "Update" %>'>
</
asp:Button
>
<
asp:Button
ID
=
"btnCancel"
Text
=
"Cancel"
runat
=
"server"
CausesValidation
=
"False"
CommandName
=
"Cancel"
></
asp:Button
>
Any help is greatly appreciated!
4 Answers, 1 is accepted
This behavior is not expected. Please, paste your complete aspx and code behind using the Code Formatter tool of the ticket editor. Otherwise, the code will not be readable.
Greetings,
Tsvetoslav
the Telerik team

In summary I am building a datatable and then filling the datatable with values from textboxes in the usercontrol. Everything (add, delete, etc.) works as expected but when I click the edit button (which is a GridEditCommandColumn) the radgrid hides and all I see is a line where the grid was. If I cause a postback the grid reappears in edit mode but does not function correctly. The check mark, which I assume is save, hides the grid again. I am still fairly new to telerik and c# programming in general. Anyways I am stuck... I have included the necessary code below: (As a side note the initial post contains code from another page I am having the same issue where everything functions properly except the edit button).
.ascx code:
<
telerik:RadGrid
ID
=
"gvTeamOrder"
runat
=
"server"
GridLines
=
"None"
OnDeleteCommand
=
"gvTeamOrder_DeleteCommand"
AutoGenerateColumns
=
"False"
OnNeedDataSource
=
"gvTeamOrder_NeedDataSource"
>
<
MasterTableView
EditMode
=
"PopUp"
DataKeyNames
=
"LineID"
>
<
CommandItemSettings
ExportToPdfText
=
"Export to Pdf"
></
CommandItemSettings
>
<
RowIndicatorColumn
>
<
HeaderStyle
Width
=
"20px"
></
HeaderStyle
>
</
RowIndicatorColumn
>
<
ExpandCollapseColumn
>
<
HeaderStyle
Width
=
"20px"
></
HeaderStyle
>
</
ExpandCollapseColumn
>
<
Columns
>
<
telerik:GridEditCommandColumn
ButtonType
=
"ImageButton"
EditImageUrl
=
"/images/telerikEdit.gif"
UniqueName
=
"EditCommandColumn"
>
</
telerik:GridEditCommandColumn
>
<
telerik:GridBoundColumn
DataField
=
"ProductCode"
HeaderText
=
"Product Code"
SortExpression
=
"ProductCode"
UniqueName
=
"ProductCode"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"Qty"
HeaderText
=
"Qty"
SortExpression
=
"Qty"
UniqueName
=
"Qty"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"UnitPrice"
HeaderText
=
"UnitPrice"
SortExpression
=
"UnitPrice"
UniqueName
=
"UnitPrice"
DataFormatString
=
"{0:C2}"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"ExtendedPrice"
HeaderText
=
"ExtendedPrice"
SortExpression
=
"ExtendedPrice"
UniqueName
=
"ExtendedPrice"
DataFormatString
=
"{0:C2}"
>
</
telerik:GridBoundColumn
>
<
telerik:GridButtonColumn
ConfirmText
=
"Delete this product?"
ConfirmDialogType
=
"RadWindow"
ConfirmTitle
=
"Delete"
ButtonType
=
"ImageButton"
ImageUrl
=
"/images/telerikDelete.gif"
CommandName
=
"Delete"
Text
=
"Delete"
UniqueName
=
"DeleteColumn"
>
<
ItemStyle
HorizontalAlign
=
"Center"
/>
</
telerik:GridButtonColumn
>
</
Columns
>
<
EditFormSettings
>
<
EditColumn
UniqueName
=
"EditCommandColumn1"
>
</
EditColumn
>
</
EditFormSettings
>
</
MasterTableView
>
</
telerik:RadGrid
>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Telerik.Web.UI;
using System.Data;
using System.Data.SqlClient;
namespace RaceTeamOrdering.userControls
{
public partial class teamOrdering : System.Web.UI.UserControl
{
System.Data.DataTable objDT;
System.Data.DataRow objDR;
RaceTeam team = new RaceTeam();
RaceTeamProducts teamProducts = new RaceTeamProducts();
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
createDataTable();
ddlTeams.Items.Insert(0, new RadComboBoxItem("-- Select One --", "-1"));
}
}
protected void ddlTeams_SelectedIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)
{
ddlShipto.Items.Insert(0, new RadComboBoxItem("-- Select One --", "-1"));
ddlTeamProducts.Items.Insert(0, new RadComboBoxItem("-- Select One --", "-1"));
team.TeamID = Convert.ToInt32(ddlTeams.SelectedValue);
team.loadRaceTeam();
lblTeamID.Text = team.TeamID.ToString();
lblCurrentCredit.Text = team.TeamCreditCurrent.ToString("C");
}
protected void ddlTeamProducts_SelectedIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)
{
txtQty.Text = "";
txtExtPrice.Text = "";
txtUnitPrice.Text = ddlTeamProducts.SelectedValue;
}
protected void txtQty_TextChanged(object sender, EventArgs e)
{
txtExtPrice.Text = (Convert.ToDecimal(ddlTeamProducts.SelectedValue.ToString()) * Convert.ToInt32(txtQty.Text)).ToString();
}
protected void createDataTable()
{
objDT = new System.Data.DataTable("Order");
objDT.Columns.Add("LineID", typeof(int));
objDT.Columns["LineID"].AutoIncrement = true;
objDT.Columns["LineID"].AutoIncrementSeed = 1;
objDT.Columns.Add("ProductCode", typeof(string));
objDT.Columns.Add("Qty", typeof(int));
objDT.Columns.Add("UnitPrice", typeof(decimal));
objDT.Columns.Add("ExtendedPrice", typeof(decimal));
Session["Order"] = objDT;
}
protected void btnAdd_Click(object sender, EventArgs e)
{
objDT = (DataTable)Session["Order"];
bool blnMatch = false;
foreach (DataRow dr in objDT.Rows)
{
if (dr["ProductCode"].ToString() == ddlTeamProducts.SelectedItem.Text)
{
dr["Qty"] = (int.Parse(dr["Qty"].ToString()) + int.Parse(txtQty.Text));
dr["ExtendedPrice"] = (int.Parse(dr["Qty"].ToString()) * decimal.Parse(dr["UnitPrice"].ToString()));
blnMatch = true;
}
}
if (!blnMatch)
{
objDR = objDT.NewRow();
objDR["ProductCode"] = ddlTeamProducts.SelectedItem.Text;
objDR["Qty"] = txtQty.Text;
objDR["UnitPrice"] = txtUnitPrice.Text;
objDR["ExtendedPrice"] = txtExtPrice.Text;
objDT.Rows.Add(objDR);
}
Session["Order"] = objDT;
gvTeamOrder.Rebind();
getCalcCredit();
}
protected void gvTeamOrder_DeleteCommand(object sender, GridCommandEventArgs e)
{
objDT = (DataTable)Session["Order"];
objDT.Rows[e.Item.ItemIndex].Delete();
Session["Order"] = objDT;
getCalcCredit();
}
protected void gvTeamOrder_NeedDataSource(object source, GridNeedDataSourceEventArgs e)
{
gvTeamOrder.DataSource = objDT;
}
public decimal getRunningTotal()
{
objDT = (DataTable)Session["Order"];
objDT.AcceptChanges();
int iCounter = 0;
decimal dRunningTotal = default(decimal);
for (iCounter = 0; iCounter <= objDT.Rows.Count - 1; iCounter++)
{
objDR = objDT.Rows[iCounter];
dRunningTotal = (dRunningTotal + Convert.ToDecimal(objDR["ExtendedPrice"]));
}
return dRunningTotal;
}
protected void getCalcCredit()
{
lblRunningTotal.Text = getRunningTotal().ToString("C");
lblRemainingCredit.Text =
(Convert.ToDecimal(lblCurrentCredit.Text.Replace("$", "")) -
Convert.ToDecimal(lblRunningTotal.Text.Replace("$", ""))).ToString("C");
}
}
}

Just a follow up a tried to create a simpler version, so it would be easier to troubleshoot. I created a similar scenarior with just one text box a button and a radgrid. Still databinding to a datatable. The radgrid still hides when I click the auto generated edit column. Below is the code from the "slimmed" down version.
.ascx page
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="radgridTest.ascx.cs" Inherits="RaceTeamOrdering.userControls.radgridTest" %>
<
asp:TextBox
ID
=
"TextBox1"
runat
=
"server"
></
asp:TextBox
>
<
asp:Button
ID
=
"Button1"
runat
=
"server"
onclick
=
"Button1_Click"
Text
=
"Button"
/>
<
telerik:RadGrid
ID
=
"RadGrid1"
runat
=
"server"
AutoGenerateDeleteColumn
=
"True"
AutoGenerateEditColumn
=
"True"
GridLines
=
"None"
onneeddatasource
=
"RadGrid1_NeedDataSource"
>
<
MasterTableView
>
<
CommandItemSettings
ExportToPdfText
=
"Export to Pdf"
></
CommandItemSettings
>
<
RowIndicatorColumn
>
<
HeaderStyle
Width
=
"20px"
></
HeaderStyle
>
</
RowIndicatorColumn
>
<
ExpandCollapseColumn
>
<
HeaderStyle
Width
=
"20px"
></
HeaderStyle
>
</
ExpandCollapseColumn
>
</
MasterTableView
>
</
telerik:RadGrid
>
.cs code behind
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Telerik.Web.UI;
using System.Data;
using System.Data.SqlClient;
namespace RaceTeamOrdering.userControls
{
public partial class radgridTest : System.Web.UI.UserControl
{
DataTable objDT = new DataTable("Order");
protected void Page_Load(object sender, EventArgs e)
{
objDT.Columns.Add("LineID", typeof(int));
objDT.Columns["LineID"].AutoIncrement = true;
objDT.Columns["LineID"].AutoIncrementSeed = 1;
objDT.Columns.Add("ProductCode", typeof(string));
Session["Order"] = objDT;
RadGrid1.DataSource = objDT;
}
protected void Button1_Click(object sender, EventArgs e)
{
objDT = (DataTable)Session["Order"];
DataRow objDR;
objDR = objDT.NewRow();
objDR["ProductCode"] = TextBox1.Text;
objDT.Rows.Add(objDR);
Session["Order"] = objDT;
RadGrid1.Rebind();
}
protected void RadGrid1_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
RadGrid1.DataSource = objDT;
}
}
}
Here is the correct modification of your code-behind:
DataTable objDT =
new
DataTable(
"Order"
);
protected
void
Page_Load(
object
sender, EventArgs e)
{
if
(!IsPostBack)
{
objDT.Columns.Add(
"LineID"
,
typeof
(
int
));
objDT.Columns[
"LineID"
].AutoIncrement =
true
;
objDT.Columns[
"LineID"
].AutoIncrementSeed = 1;
objDT.Columns.Add(
"ProductCode"
,
typeof
(
string
));
Session[
"Order"
] = objDT;
}
}
protected
void
Button1_Click(
object
sender, EventArgs e)
{
objDT = (DataTable)Session[
"Order"
];
DataRow objDR;
objDR = objDT.NewRow();
objDR[
"ProductCode"
] = TextBox1.Text;
objDT.Rows.Add(objDR);
Session[
"Order"
] = objDT;
RadGrid1.Rebind();
}
protected
void
RadGrid1_NeedDataSource(
object
sender, GridNeedDataSourceEventArgs e)
{
RadGrid1.DataSource = Session[
"Order"
];
}
Best wishes,
Tsvetoslav
the Telerik team