This is a migrated thread and some comments may be shown as answers.

Radgrid editform usercontrol command buttons

4 Answers 244 Views
General Discussions
This is a migrated thread and some comments may be shown as answers.
Jon
Top achievements
Rank 1
Jon asked on 10 Nov 2010, 04:57 PM
Group,
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

Sort by
0
Tsvetoslav
Telerik team
answered on 12 Nov 2010, 10:44 AM
Hello Jon,

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
Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
0
Jon
Top achievements
Rank 1
answered on 12 Nov 2010, 05:20 PM

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");
        }
    }
}
0
Jon
Top achievements
Rank 1
answered on 12 Nov 2010, 08:14 PM

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;
        }
    }
}
0
Tsvetoslav
Telerik team
answered on 15 Nov 2010, 02:04 PM
Hi Jon,

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
Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
Tags
General Discussions
Asked by
Jon
Top achievements
Rank 1
Answers by
Tsvetoslav
Telerik team
Jon
Top achievements
Rank 1
Share this question
or