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

Grid / User Control Edit Form

3 Answers 94 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Trent
Top achievements
Rank 2
Trent asked on 13 May 2010, 03:18 PM
Hello Telerik,

I am working on a project and I have used the Grid popup edit with UserControl as seen on the following link
everything works as expected I click on the edit button and a popup window opens and displays the user control but the data wont bind and I am at a loss to explain why.

How can I resolve this issue??

please find attached the code for xd_ViewContact and xd_EditContact

Cheers.

xd_ViewContact.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="xd_ViewContact.ascx.cs" 
    Inherits="xDynamics.Controls.View.xd_ViewContact" %> 
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolkit" %> 
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %> 
<script type="text/javascript"
    function RowSelected(row) { 
 
    } 
    function RowDblClick(sender, eventArgs) { 
        sender.get_masterTableView().editItem(eventArgs.get_itemIndexHierarchical()); 
    } 
</script> 
<div> 
    <telerik:RadGrid ID="rgCustomerContact" runat="server" AllowPaging="True"  
        AllowSorting="True" OnPreRender="rgCustomerContact_PreRender" 
        GridLines="None" OnUpdateCommand="rgCustomerContact_UpdateCommand" OnInsertCommand="rgCustomerContact_InsertCommand" 
        OnDeleteCommand="rgCustomerContact_DeleteCommand" OnItemCommand="rgCustomerContact_ItemCommand" 
        PageSize="9" OnNeedDataSource="BindGrid" AutoGenerateColumns="False"
        <ClientSettings AllowColumnsReorder="True" EnablePostBackOnRowClick="true" ReorderColumnsOnClient="True"
            <Selecting AllowRowSelect="True" /> 
            <ClientEvents OnRowSelected="RowSelected" /> 
            <ClientEvents OnRowDblClick="RowDblClick" /> 
        </ClientSettings> 
        <MasterTableView DataKeyNames="CustomerContactID" CommandItemDisplay="Top" EditMode="PopUp"
            <Columns> 
                <telerik:GridEditCommandColumn UniqueName="EditCommandColumn" ButtonType="ImageButton" 
                    EditImageUrl="~/App_Themes/xDynamics/images/Edit.gif"
                </telerik:GridEditCommandColumn> 
                <telerik:GridBoundColumn UniqueName="ContactID" HeaderText="ContactID" DataField="CustomerContactID"
                </telerik:GridBoundColumn> 
                <telerik:GridBoundColumn UniqueName="FirstName" HeaderText="First Name" DataField="CustomerContactID_FirstName"
                </telerik:GridBoundColumn> 
                <telerik:GridBoundColumn UniqueName="Surname" HeaderText="Surname" DataField="CustomerContactID_LastName"
                </telerik:GridBoundColumn> 
                <telerik:GridBoundColumn UniqueName="Phone" HeaderText="Phone" DataField="CustomerContactID_PhoneNumber"
                </telerik:GridBoundColumn> 
                <telerik:GridBoundColumn UniqueName="Mobile" HeaderText="Mobile" DataField="CustomerContactID_MobileNumber"
                </telerik:GridBoundColumn> 
                <telerik:GridBoundColumn UniqueName="Fax" HeaderText="Fax" DataField="CustomerContactID_FaxNumber"
                </telerik:GridBoundColumn> 
                <telerik:GridBoundColumn UniqueName="Email" HeaderText="Email" DataField="CustomerContactID_Email"
                </telerik:GridBoundColumn> 
            </Columns> 
            <RowIndicatorColumn> 
                <HeaderStyle Width="20px"></HeaderStyle> 
            </RowIndicatorColumn> 
            <ExpandCollapseColumn> 
                <HeaderStyle Width="20px"></HeaderStyle> 
            </ExpandCollapseColumn> 
            <EditFormSettings UserControlName="~/Applications/xDynamics/Controls/Forms/Edit/xd_EditContact.ascx" 
                EditFormType="WebUserControl" InsertCaption="Add new item" CaptionFormatString="Edit CustomerContactID: {0}" 
                CaptionDataField="CustomerContactID"
                <PopUpSettings Width="500px" /> 
                <EditColumn UniqueName="EditCommandColumn1" > 
                </EditColumn> 
            </EditFormSettings> 
        </MasterTableView> 
    </telerik:RadGrid> 
</div> 
<div> 
    <ajaxToolkit:Accordion ID="Accordion1" runat="server" SelectedIndex="0" HeaderCssClass="accordionHeaderDeselected" 
        HeaderSelectedCssClass="accordionHeaderSelected" ContentCssClass="accordionContent" 
        FadeTransitions="false" FramesPerSecond="40" TransitionDuration="250" Visible="false" 
        RequireOpenedPane="false" SuppressHeaderPostbacks="true"
        <Panes> 
            <ajaxToolkit:AccordionPane ID="AccordionPane1" runat="server"
                <Header> 
                    <href="" style="text-decoration: none">Contact Details</a></Header
                <Content> 
                    <table id="tblPan1" width="500px"
                        <tr runat="server" width="150px" id="trCustomerTypeID" visible="False"
                            <td> 
                                CustomerContactID 
                            </td> 
                            <td> 
                                <asp:Label ID="lblCustomerContactID" runat="server"
                                </asp:Label> 
                            </td> 
                        </tr> 
                        <tr runat="server" width="150px" id="tr1" visible="False"
                            <td> 
                                CustomerID 
                            </td> 
                            <td> 
                                <asp:Label ID="lblCustomerID" runat="server"
                                </asp:Label> 
                            </td> 
                        </tr> 
                        <tr runat="server" width="150px" id="tr2"
                            <td> 
                                Title 
                            </td> 
                            <td> 
                                <asp:TextBox ID="txtTitle" runat="server" Width="300" ReadOnly="True"
                                </asp:TextBox> 
                            </td> 
                            <td> 
                                Position 
                            </td> 
                            <td> 
                                <asp:TextBox ID="txtPosition" runat="server" Width="300" ReadOnly="True"
                                </asp:TextBox> 
                            </td> 
                        </tr> 
                        <tr runat="server" width="150px" id="tr3"
                            <td> 
                                First Name 
                            </td> 
                            <td> 
                                <asp:TextBox ID="txtFirstName" runat="server" Width="300" ReadOnly="True"
                                </asp:TextBox> 
                            </td> 
                            <td> 
                                Last Name 
                            </td> 
                            <td> 
                                <asp:TextBox ID="txtLastName" runat="server" Width="300" ReadOnly="True"
                                </asp:TextBox> 
                            </td> 
                        </tr> 
                        <tr runat="server" width="150px" id="tr6"
                            <td width="150px"
                                Phone 
                            </td> 
                            <td> 
                                <asp:TextBox ID="txtPhone" runat="server" Width="300" ReadOnly="True"
                                </asp:TextBox> 
                            </td> 
                            <td> 
                                Mobile 
                            </td> 
                            <td> 
                                <asp:TextBox ID="txtMobile" runat="server" Width="300" ReadOnly="True"
                                </asp:TextBox> 
                            </td> 
                        </tr> 
                        <tr runat="server" width="150px" id="tr8"
                            <td> 
                                Fax 
                            </td> 
                            <td> 
                                <asp:TextBox ID="txtFax" runat="server" Width="300" ReadOnly="True"
                                </asp:TextBox> 
                            </td> 
                            <td> 
                                Email 
                            </td> 
                            <td> 
                                <asp:TextBox ID="txtEmail" runat="server" Width="300" ReadOnly="True"
                                </asp:TextBox> 
                            </td> 
                        </tr> 
                    </table> 
                </Content> 
            </ajaxToolkit:AccordionPane> 
            <ajaxToolkit:AccordionPane ID="AccordionPane2" runat="server"
                <Header> 
                    <href="" style="text-decoration: none">Contact Mailing</a></Header
                <Content> 
                    <table id="Table1" width="500px"
                        <tr runat="server" width="150px" id="tr10"
                            <td> 
                                Address 
                            </td> 
                            <td> 
                                <asp:TextBox ID="txtAddress" runat="server" Width="300" ReadOnly="True"
                                </asp:TextBox> 
                            </td> 
                            <td> 
                                Country 
                            </td> 
                            <td> 
                                <asp:TextBox ID="txtCountry" runat="server" Width="300" ReadOnly="True"
                                </asp:TextBox> 
                            </td> 
                        </tr> 
                        <tr runat="server" width="150px" id="tr12"
                            <td> 
                                State 
                            </td> 
                            <td> 
                                <asp:TextBox ID="txtState" runat="server" Width="300" ReadOnly="True"
                                </asp:TextBox> 
                            </td> 
                            <td> 
                                Location 
                            </td> 
                            <td> 
                                <asp:TextBox ID="txtLocation" runat="server" Width="300" ReadOnly="True"
                                </asp:TextBox> 
                            </td> 
                        </tr> 
                        <tr runat="server" width="150px" id="tr14"
                            <td> 
                                Postcode 
                            </td> 
                            <td> 
                                <asp:TextBox ID="txtPostcode" runat="server" Width="300" ReadOnly="True"
                                </asp:TextBox> 
                            </td> 
                        </tr> 
                        <tr> 
                            <td> 
                                Active? 
                            </td> 
                            <td> 
                                <asp:CheckBox ID="chkActive" runat="server" Enabled="False"></asp:CheckBox> 
                            </td> 
                            <td> 
                                Training Account&nbsp; 
                            </td> 
                            <td> 
                                <asp:CheckBox ID="chkTrainingAccount" runat="server" Enabled="False" /> 
                            </td> 
                        </tr> 
                        <tr runat="server" id="trOrganiserActive"
                            <td> 
                                Organiser Active&nbsp; 
                            </td> 
                            <td> 
                                <asp:CheckBox ID="chkOrganiserActive" runat="server" Enabled="False" /> 
                            </td> 
                        </tr> 
                        <tr runat="server" width="150px" id="tr16"
                            <td> 
                                Edited By 
                            </td> 
                            <td> 
                                <asp:TextBox ID="txtEditedBy" runat="server" Width="300" Enabled="False"
                                </asp:TextBox> 
                            </td> 
                            <td> 
                                Edited Date 
                            </td> 
                            <td> 
                                <asp:TextBox ID="txtEditedDate" runat="server" Width="300" Enabled="False"
                                </asp:TextBox> 
                            </td> 
                        </tr> 
                    </table> 
                </Content> 
            </ajaxToolkit:AccordionPane> 
        </Panes> 
    </ajaxToolkit:Accordion> 
 
</div> 
 
 
xd_ViewContact.ascx.cs
using System; 
using System.Collections; 
using System.Collections.Generic; 
using System.Configuration; 
using System.Data; 
using System.Data.SqlClient; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using Telerik.Web.UI; 
 
namespace xDynamics.Controls.View 
    public partial class xd_ViewContact : UserControl 
    { 
        DataAccess data = new DataAccess(); 
        protected void Page_Init(object sender, EventArgs e) 
        { 
            Accordion1.FindControl("nothing"); 
        } 
        public void Page_Load(object sender, EventArgs e) 
        { 
 
        } 
 
        public void FunctionPageLoad() 
        { 
            if (Geek.CustomerID != null
            { 
                lblCustomerID.Text = Geek.CustomerID.ToString(); 
            } 
            Accordion1.Visible = false
        } 
        public void RebindGridFunction() 
        { 
            rgCustomerContact.Rebind(); 
        } 
 
        protected void rgCustomerContact_ItemCommand(object source, GridCommandEventArgs e) 
        { 
            Geek.xd_CustomerContactID = rgCustomerContact.SelectedValue; 
            BindCustomerContact(Geek.xd_CustomerContactID.ToString()); 
            Accordion1.Visible = true
        } 
        protected void rgCustomerContact_PreRender(object sender, EventArgs e) 
        { 
            if (!this.IsPostBack) 
            { 
                //this.rgCustomerContact.MasterTableView.Items[1].Edit = true; 
                this.rgCustomerContact.MasterTableView.Rebind(); 
            } 
        } 
 
        protected void BindGrid(object source, GridNeedDataSourceEventArgs e) 
        { 
            this.rgCustomerContact.DataSource = this.Contacts; 
            this.Contacts.PrimaryKey = new DataColumn[] { this.Contacts.Columns["CustomerContactID"] }; 
        } 
        public void BindCustomerContact(string CustomerContactID) 
        { 
            if (!String.IsNullOrEmpty(Geek.xd_CustomerContactID.ToString())) 
            { 
                string sql = string.Format("SELECT data_customer_contact.CustomerContactID, data_customer_contact.CustomerID, data_lookup_tables_1.LookupID_LookupTable AS Title, data_customer_contact.CustomerContactID_FirstName, data_customer_contact.CustomerContactID_LastName, data_customer_contact.CustomerContactID_PositionTitle, data_customer_contact.CustomerContactID_PhoneNumber, data_customer_contact.CustomerContactID_MobileNumber, data_customer_contact.CustomerContactID_FaxNumber, data_customer_contact.CustomerContactID_Email, data_customer_contact.CustomerContactID_Address, data_lookup_tables_3.LookupID_LookupTable AS LookupID_Country, data_lookup_tables_5.LookupID_LookupTable AS LookupID_State, data_lookup_tables_2.LookupID_LookupTable AS LookupID_Location, data_lookup_tables_4.LookupID_LookupTable AS LookupID_Postcode, data_customer_contact.CustomerContactID_Active, IsNull(data_customer_contact.TrainingActive,0) AS TrainingActive, IsNull(data_customer_contact.OrganiserActive,0) AS OrganiserActive, data_customer_contact.CustomerContactID_EditedBy, data_customer_contact.CustomerContactID_EditedDate FROM Xtrain.data_customer_contact LEFT OUTER JOIN Xtrain.data_lookup_tables AS data_lookup_tables_4 ON Xtrain.data_customer_contact.LookupID_Postcode = data_lookup_tables_4.LookupID LEFT OUTER JOIN Xtrain.data_lookup_tables AS data_lookup_tables_2 ON Xtrain.data_customer_contact.LookupID_Location = data_lookup_tables_2.LookupID LEFT OUTER JOIN Xtrain.data_lookup_tables AS data_lookup_tables_5 ON Xtrain.data_customer_contact.LookupID_State = data_lookup_tables_5.LookupID LEFT OUTER JOIN Xtrain.data_lookup_tables AS data_lookup_tables_3 ON Xtrain.data_customer_contact.LookupID_Country = data_lookup_tables_3.LookupID LEFT OUTER JOIN Xtrain.data_lookup_tables AS data_lookup_tables_1 ON Xtrain.data_customer_contact.CustomerContactID_ContactTitle = data_lookup_tables_1.LookupID WHERE (data_customer_contact.CustomerContactID = {0})", CustomerContactID); 
 
                DataTable dt = data.GetDataTable(sql); 
 
                if (dt.Rows.Count > 0) 
                { 
                    lblCustomerID.Text = dt.Rows[0]["CustomerID"].ToString(); 
                    if (!String.IsNullOrEmpty(dt.Rows[0]["CustomerContactID"].ToString())) 
                    { 
                        lblCustomerContactID.Text = dt.Rows[0]["CustomerContactID"].ToString(); 
                        //Geek.xd_CustomerContactID = lblCustomerContactID.Text; 
                    } 
                    txtTitle.Text = dt.Rows[0]["Title"].ToString(); 
                    txtPosition.Text = dt.Rows[0]["CustomerContactID_PositionTitle"].ToString(); 
                    txtFirstName.Text = dt.Rows[0]["CustomerContactID_FirstName"].ToString(); 
                    txtLastName.Text = dt.Rows[0]["CustomerContactID_LastName"].ToString(); 
                    txtPhone.Text = dt.Rows[0]["CustomerContactID_PhoneNumber"].ToString(); 
                    txtMobile.Text = dt.Rows[0]["CustomerContactID_MobileNumber"].ToString(); 
                    txtFax.Text = dt.Rows[0]["CustomerContactID_FaxNumber"].ToString(); 
                    txtEmail.Text = dt.Rows[0]["CustomerContactID_Email"].ToString(); 
 
                    txtAddress.Text = dt.Rows[0]["CustomerContactID_Address"].ToString(); 
                    txtCountry.Text = dt.Rows[0]["LookupID_Country"].ToString(); 
                    txtState.Text = dt.Rows[0]["LookupID_State"].ToString(); 
                    txtLocation.Text = dt.Rows[0]["LookupID_Location"].ToString(); 
                    txtPostcode.Text = dt.Rows[0]["LookupID_Postcode"].ToString(); 
                    if (!String.IsNullOrEmpty(dt.Rows[0]["CustomerContactID_Active"].ToString())) 
                    { 
                        chkActive.Checked = Convert.ToBoolean(dt.Rows[0]["CustomerContactID_Active"].ToString()); 
                    } 
                    if (!String.IsNullOrEmpty(dt.Rows[0]["TrainingActive"].ToString())) 
                    { 
                        chkTrainingAccount.Checked = Convert.ToBoolean(dt.Rows[0]["TrainingActive"]); 
                    } 
                    if (!String.IsNullOrEmpty(dt.Rows[0]["OrganiserActive"].ToString())) 
                    { 
                        chkOrganiserActive.Checked = Convert.ToBoolean(dt.Rows[0]["OrganiserActive"]); 
                    } 
                    txtEditedBy.Text = dt.Rows[0]["CustomerContactID_EditedBy"].ToString(); 
                    txtEditedDate.Text = dt.Rows[0]["CustomerContactID_EditedDate"].ToString(); 
                } 
                dt.Dispose(); 
 
            } 
            Geek.xd_CustomerContactID = lblCustomerContactID.Text; 
        } 
 
        private static DataTable GetDataTable(string queryString) 
        { 
            String ConnString = ConfigurationManager.ConnectionStrings["XDEVConnect"].ConnectionString; 
            SqlConnection MySqlConnection = new SqlConnection(ConnString); 
            SqlDataAdapter MySqlDataAdapter = new SqlDataAdapter(); 
            MySqlDataAdapter.SelectCommand = new SqlCommand(queryString, MySqlConnection); 
 
            DataTable myDataTable = new DataTable(); 
            MySqlConnection.Open(); 
            try 
            { 
                MySqlDataAdapter.Fill(myDataTable); 
            } 
            finally 
            { 
                MySqlConnection.Close(); 
            } 
 
            return myDataTable; 
        } 
 
        private DataTable Contacts 
        { 
            get 
            { 
                object obj = this.Session["Contacts"]; 
                if ((!(obj == null))) 
                { 
                    return ((DataTable)(obj)); 
                } 
                DataTable myContactsTable = new DataTable(); 
                myContactsTable = GetDataTable("SELECT data_customer_contact.CustomerContactID, data_customer_contact.CustomerID, data_customer_contact.CustomerContactID_ContactTitle, data_customer_contact.CustomerContactID_FirstName, data_customer_contact.CustomerContactID_LastName, data_customer_contact.CustomerContactID_PositionTitle, data_customer_contact.CustomerContactID_PhoneNumber, data_customer_contact.CustomerContactID_MobileNumber, data_customer_contact.CustomerContactID_FaxNumber, data_customer_contact.CustomerContactID_Email, data_customer_contact.CustomerContactID_Address, data_customer_contact.LookupID_Country, data_customer_contact.LookupID_State, data_customer_contact.LookupID_Location, data_customer_contact.LookupID_Postcode, data_customer_contact.CustomerContactID_Active, data_customer_contact.CustomerContactID_EditedBy, data_customer_contact.CustomerContactID_EditedDate, IsNull(data_customer_contact.TrainingActive,0) AS TrainingActive, IsNull(data_customer_contact.OrganiserActive,0) AS OrganiserActive FROM Xtrain.data_customer_contact WHERE (CustomerID = " + Geek.CustomerID + ")"); 
                this.Session["Contacts"] = myContactsTable; 
                return myContactsTable; 
            } 
        } 
 
        protected void rgCustomerContact_UpdateCommand(object source, GridCommandEventArgs e) 
        { 
            GridEditableItem editedItem = e.Item as GridEditableItem; 
            UserControl ucEditContact = (UserControl)e.Item.FindControl(GridEditFormItem.EditFormUserControlID); 
 
            //Prepare new row to add it in the DataSource 
            DataRow[] changedRows = this.Contacts.Select("CustomerContactID = " + editedItem.OwnerTableView.DataKeyValues[editedItem.ItemIndex]["CustomerContactID"]); 
 
            if (changedRows.Length != 1) 
            { 
                rgCustomerContact.Controls.Add(new LiteralControl("Unable to locate the Employee for updating.")); 
                e.Canceled = true
                return
            } 
 
            //Update new values 
            Hashtable newValues = new Hashtable(); 
 
            newValues["CustomerID"] = (ucEditContact.FindControl("ddlCompany"as DropDownList).SelectedItem.Value; 
            newValues["CustomerContactID_ContactTitle"] = (ucEditContact.FindControl("ddlTitle"as DropDownList).SelectedItem.Value; 
            newValues["CustomerContactID_FirstName"] = (ucEditContact.FindControl("txtFirstName"as TextBox).Text; 
            newValues["CustomerContactID_LastName"] = (ucEditContact.FindControl("txtLastName"as TextBox).Text; 
            newValues["CustomerContactID_PositionTitle"] = (ucEditContact.FindControl("txtPosition"as TextBox).Text; 
            newValues["CustomerContactID_PhoneNumber"] = (ucEditContact.FindControl("txtPhone"as TextBox).Text; 
            newValues["CustomerContactID_MobileNumber"] = (ucEditContact.FindControl("txtMobile"as TextBox).Text; 
            newValues["CustomerContactID_FaxNumber"] = (ucEditContact.FindControl("txtFax"as TextBox).Text; 
            newValues["CustomerContactID_Address"] = (ucEditContact.FindControl("txtAddress"as TextBox).Text; 
            newValues["CustomerContactID_Notes"] = (ucEditContact.FindControl("txtNotes"as TextBox).Text; 
            newValues["CustomerContactID_Email"] = (ucEditContact.FindControl("txtEmail"as TextBox).Text; 
 
            newValues["LookupID_Country"] = (ucEditContact.FindControl("ddlCountry"as DropDownList).SelectedItem.Value; 
            newValues["LookupID_State"] = (ucEditContact.FindControl("ddlState"as DropDownList).SelectedItem.Value; 
            newValues["LookupID_Location"] = (ucEditContact.FindControl("ddlLocation"as DropDownList).SelectedItem.Value; 
            newValues["LookupID_Postcode"] = (ucEditContact.FindControl("ddlPostcode"as DropDownList).SelectedItem.Value; 
 
            newValues["CustomerContactID_Active"] = (ucEditContact.FindControl("chkActive"as CheckBox).Checked; 
            newValues["TrainingActive"] = (ucEditContact.FindControl("chkTrainingAccount"as CheckBox).Checked; 
            newValues["OrganiserActive"] = (ucEditContact.FindControl("chkOrganiserActive"as CheckBox).Checked; 
 
            newValues["CustomerContactID_EditedBy"] = (ucEditContact.FindControl("txtEditedBy"as TextBox).Text; 
            newValues["CustomerContactID_EditedDate"] = (ucEditContact.FindControl("txtEditedDate"as TextBox).Text; 
 
            changedRows[0].BeginEdit(); 
            try 
            { 
                foreach (DictionaryEntry entry in newValues) 
                { 
                    changedRows[0][(string)entry.Key] = entry.Value; 
                } 
                changedRows[0].EndEdit(); 
                this.Contacts.AcceptChanges(); 
            } 
            catch (Exception ex) 
            { 
                changedRows[0].CancelEdit(); 
 
                Label lblError = new Label(); 
                lblError.Text = "Unable to update Contact. Reason: " + ex.Message; 
                lblError.ForeColor = System.Drawing.Color.Red; 
                rgCustomerContact.Controls.Add(lblError); 
 
                e.Canceled = true
            } 
        } 
 
        protected void rgCustomerContact_InsertCommand(object source, GridCommandEventArgs e) 
        { 
            GridEditableItem editedItem = e.Item as GridEditableItem; 
            UserControl ucAddContact = (UserControl)e.Item.FindControl(GridEditFormItem.EditFormUserControlID); 
 
            //Create new row in the DataSource 
            DataRow newRow = this.Contacts.NewRow(); 
 
            //Insert new values 
            Hashtable newValues = new Hashtable(); 
 
            newValues["CustomerID"] = (ucAddContact.FindControl("lblCompany"as Label).Text; 
            newValues["Title"] = (ucAddContact.FindControl("ddlTitle"as DropDownList).SelectedItem.Value; 
            newValues["CustomerContactID_FirstName"] = (ucAddContact.FindControl("txtFirstName"as TextBox).Text; 
            newValues["CustomerContactID_LastName"] = (ucAddContact.FindControl("txtLastName"as TextBox).Text; 
            newValues["CustomerContactID_PositionTitle"] = (ucAddContact.FindControl("txtPosition"as TextBox).Text; 
            newValues["CustomerContactID_PhoneNumber"] = (ucAddContact.FindControl("txtPhone"as TextBox).Text; 
            newValues["CustomerContactID_MobileNumber"] = (ucAddContact.FindControl("txtMobile"as TextBox).Text; 
            newValues["CustomerContactID_FaxNumber"] = (ucAddContact.FindControl("txtFax"as TextBox).Text; 
            newValues["CustomerContactID_Address"] = (ucAddContact.FindControl("txtAddress"as TextBox).Text; 
            newValues["CustomerContactID_Notes"] = (ucAddContact.FindControl("txtNotes"as TextBox).Text; 
            newValues["CustomerContactID_Email"] = (ucAddContact.FindControl("txtEmail"as TextBox).Text; 
 
            newValues["LookupID_Country"] = (ucAddContact.FindControl("ddlCountry"as DropDownList).SelectedItem.Value; 
            newValues["LookupID_State"] = (ucAddContact.FindControl("ddlState"as DropDownList).SelectedItem.Value; 
            newValues["LookupID_Location"] = (ucAddContact.FindControl("ddlLocation"as DropDownList).SelectedItem.Value; 
            newValues["LookupID_Postcode"] = (ucAddContact.FindControl("ddlPostcode"as DropDownList).SelectedItem.Value; 
 
            newValues["CustomerContactID_Active"] = (ucAddContact.FindControl("chkActive"as CheckBox).Checked; 
            newValues["TrainingActive"] = (ucAddContact.FindControl("chkTrainingAccount"as CheckBox).Checked; 
            newValues["OrganiserActive"] = (ucAddContact.FindControl("chkOrganiserActive"as CheckBox).Checked; 
 
            newValues["CustomerContactID_EditedBy"] = (ucAddContact.FindControl("txtEditedBy"as TextBox).Text; 
            newValues["CustomerContactID_EditedDate"] = (ucAddContact.FindControl("txtEditedDate"as TextBox).Text; 
 
            //make sure that unique primary key value is generated for the inserted row  
            newValues["CustomerContactID"] = (int)this.Contacts.Rows[this.Contacts.Rows.Count - 1]["CustomerContactID"] + 1; 
            try 
            { 
                foreach (DictionaryEntry entry in newValues) 
                { 
                    newRow[(string)entry.Key] = entry.Value; 
                } 
                this.Contacts.Rows.Add(newRow); 
                this.Contacts.AcceptChanges(); 
            } 
            catch (Exception ex) 
            { 
                Label lblError = new Label(); 
                lblError.Text = "Unable to insert Contact. Reason: " + ex.Message; 
                lblError.ForeColor = System.Drawing.Color.Red; 
                rgCustomerContact.Controls.Add(lblError); 
 
                e.Canceled = true
            } 
        } 
 
        protected void rgCustomerContact_DeleteCommand(object source, GridCommandEventArgs e) 
        { 
            string ID = (e.Item as GridDataItem).OwnerTableView.DataKeyValues[e.Item.ItemIndex]["CustomerContactID"].ToString(); 
            DataTable contactTable = this.Contacts; 
            if (contactTable.Rows.Find(ID) != null
            { 
                contactTable.Rows.Find(ID).Delete(); 
                contactTable.AcceptChanges(); 
            } 
        } 
         
    } 

xd_EditContact.ascx
<%@ Control AutoEventWireup="true" CodeFile="xd_EditContact.ascx.cs" Inherits="xDynamics.Controls.Edit.xd_EditContact" 
    Language="C#" %> 
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolkit" %> 
<div> 
    <asp:ValidationSummary ID="vsContact" runat="server" ValidationGroup="Contact" ShowMessageBox="True" 
        ShowSummary="False" DisplayMode="List" /> 
    <ajaxToolkit:Accordion ID="Accordion1" runat="server" SelectedIndex="0" HeaderCssClass="accordionHeaderDeselected" 
        HeaderSelectedCssClass="accordionHeaderSelected" ContentCssClass="accordionContent" 
        FadeTransitions="false" FramesPerSecond="40" TransitionDuration="250" RequireOpenedPane="false" 
        SuppressHeaderPostbacks="true"
        <Panes> 
            <ajaxToolkit:AccordionPane ID="AccordionPane1" runat="server"
                <Header> 
                    <href="" style="text-decoration: none">Details</a></Header
                <Content> 
                    <table id="tblPan1" width="500px" class="style1"
                        <tr runat="server" width="150px" id="tr1" visible="true"
                            <td> 
                                CustomerID 
                            </td> 
                            <td> 
                                <asp:UpdatePanel ID="UpdatePanel6" runat="server"
                                    <ContentTemplate> 
                                        <asp:DropDownList ID="ddlCompany" runat="server" AutoPostBack="True" Width="100%" 
                                            CausesValidation="True"
                                        </asp:DropDownList> 
                                    </ContentTemplate> 
                                </asp:UpdatePanel> 
                            </td> 
                        </tr> 
                        <tr runat="server" width="150px" id="tr4"
                            <td> 
                                CustomerContactID 
                            </td> 
                            <td> 
                                <asp:Label ID="lblCustomerContactID" runat="server" Text='<%# DataBinder.Eval( Container, "DataItem.CustomerContactID") %>'
                                </asp:Label> 
                            </td> 
                        </tr> 
                        <tr runat="server" width="150px" id="tr2"
                            <td> 
                                Title 
                            </td> 
                            <td> 
                                <asp:UpdatePanel ID="UpdatePanel5" runat="server"
                                    <ContentTemplate> 
                                        <asp:DropDownList ID="ddlTitle" runat="server" AutoPostBack="True" Width="100%" 
                                            CausesValidation="True"
                                        </asp:DropDownList> 
                                        <asp:RequiredFieldValidator ID="rfvTitle" runat="server" ErrorMessage="*" ControlToValidate="ddlTitle" 
                                            ValidationGroup="Contact"></asp:RequiredFieldValidator> 
                                    </ContentTemplate> 
                                </asp:UpdatePanel> 
                            </td> 
                        </tr> 
                        <tr runat="server" width="150px" id="tr5"
                            <td> 
                                Position 
                            </td> 
                            <td> 
                                <asp:TextBox ID="txtPosition" runat="server" Width="300" Text='<%# DataBinder.Eval( Container, "DataItem.CustomerContactID_PositionTitle") %>'
                                </asp:TextBox> 
                                <asp:RequiredFieldValidator ID="rfvPosition" runat="server" ErrorMessage="*" ValidationGroup="Contact" 
                                    ControlToValidate="txtPosition"></asp:RequiredFieldValidator> 
                            </td> 
                        </tr> 
                        <tr runat="server" width="150px" id="tr3"
                            <td> 
                                First Name 
                            </td> 
                            <td> 
                                <asp:TextBox ID="txtFirstName" runat="server" Width="300" Text='<%# DataBinder.Eval( Container, "DataItem.CustomerContactID_FirstName") %>'
                                </asp:TextBox> 
                                <asp:RequiredFieldValidator ID="rfvFirstName" runat="server" ErrorMessage="*" ValidationGroup="Contact" 
                                    ControlToValidate="txtFirstName"></asp:RequiredFieldValidator> 
                            </td> 
                        </tr> 
                        <tr runat="server" width="150px" id="tr7"
                            <td> 
                                Surname Name 
                            </td> 
                            <td> 
                                <asp:TextBox ID="txtLastName" runat="server" Width="300" Text='<%# DataBinder.Eval( Container, "DataItem.CustomerContactID_LastName") %>'
                                </asp:TextBox> 
                                <asp:RequiredFieldValidator ID="rfvLastName" runat="server" ErrorMessage="*" ValidationGroup="Contact" 
                                    ControlToValidate="txtLastName"></asp:RequiredFieldValidator> 
                            </td> 
                        </tr> 
                    </table> 
                </Content> 
            </ajaxToolkit:AccordionPane> 
            <ajaxToolkit:AccordionPane ID="AccordionPane3" runat="server"
                <Header> 
                    <href="" style="text-decoration: none">Contact Details</a></Header
                <Content> 
                    <table id="Table2" width="500px" class="style1"
                        <tr runat="server" width="150px" id="tr6"
                            <td width="150px"
                                Phone 
                            </td> 
                            <td> 
                                <asp:TextBox ID="txtPhone" runat="server" Width="300" Text='<%# DataBinder.Eval( Container, "DataItem.CustomerContactID_PhoneNumber") %>'
                                </asp:TextBox> 
                                <asp:RequiredFieldValidator ID="rfvPhone" runat="server" ErrorMessage="*" ValidationGroup="Contact" 
                                    ControlToValidate="txtPhone"></asp:RequiredFieldValidator> 
                            </td> 
                        </tr> 
                        <tr runat="server" width="150px" id="tr9"
                            <td> 
                                Mobile 
                            </td> 
                            <td> 
                                <asp:TextBox ID="txtMobile" runat="server" Width="300" Text='<%# DataBinder.Eval( Container, "DataItem.CustomerContactID_MobileNumber") %>'
                                </asp:TextBox> 
                                <asp:RequiredFieldValidator ID="rfvMobile" runat="server" ErrorMessage="*" ValidationGroup="Contact" 
                                    ControlToValidate="txtMobile"></asp:RequiredFieldValidator> 
                            </td> 
                        </tr> 
                        <tr runat="server" width="150px" id="tr8"
                            <td> 
                                Fax 
                            </td> 
                            <td> 
                                <asp:TextBox ID="txtFax" runat="server" Width="300" Text='<%# DataBinder.Eval( Container, "DataItem.CustomerContactID_FaxNumber") %>'
                                </asp:TextBox> 
                                <asp:RequiredFieldValidator ID="RequiredFieldValidator7" runat="server" ErrorMessage="*" 
                                    ValidationGroup="Contact" ControlToValidate="txtFax"></asp:RequiredFieldValidator> 
                            </td> 
                        </tr> 
                        <tr runat="server" width="150px" id="tr11"
                            <td> 
                                Email 
                            </td> 
                            <td> 
                                <asp:TextBox ID="txtEmail" runat="server" Width="300" Text='<%# DataBinder.Eval( Container, "DataItem.CustomerContactID_Email") %>'
                                </asp:TextBox> 
                                <asp:RequiredFieldValidator ID="rfvEmail" runat="server" ErrorMessage="*" ValidationGroup="Contact" 
                                    ControlToValidate="txtEmail"></asp:RequiredFieldValidator> 
                            </td> 
                        </tr> 
                    </table> 
                </Content> 
            </ajaxToolkit:AccordionPane> 
            <ajaxToolkit:AccordionPane ID="AccordionPane2" runat="server"
                <Header> 
                    <href="" style="text-decoration: none">Mailing</a></Header
                <Content> 
                    <table id="Table1" width="100%" class="style1"
                        <tr runat="server" width="150px" id="tr10"
                            <td> 
                                Address 
                            </td> 
                            <td> 
                                <asp:TextBox ID="txtAddress" runat="server" Width="300" Text='<%# DataBinder.Eval( Container, "DataItem.CustomerContactID_Address") %>'
                                </asp:TextBox> 
                                <asp:RequiredFieldValidator ID="rfvAddress" runat="server" ErrorMessage="*" ValidationGroup="Contact" 
                                    ControlToValidate="txtAddress"></asp:RequiredFieldValidator> 
                            </td> 
                        </tr> 
                        <tr runat="server" width="150px" id="tr12"
                            <td> 
                                Country&nbsp; 
                            </td> 
                            <td> 
                                <asp:UpdatePanel ID="UpdatePanel1" runat="server"
                                    <ContentTemplate> 
                                        <asp:DropDownList ID="ddlCountry" runat="server" Width="100%" AutoPostBack="True" 
                                            OnSelectedIndexChanged="ddlCountry_SelectedIndexChanged"
                                        </asp:DropDownList> 
                                        <asp:SqlDataSource ID="sdsCountry" runat="server"></asp:SqlDataSource> 
                                        <asp:RequiredFieldValidator ID="rfvCountry" runat="server" ErrorMessage="*" ControlToValidate="ddlCountry" 
                                            ValidationGroup="Customer"></asp:RequiredFieldValidator> 
                                    </ContentTemplate> 
                                </asp:UpdatePanel> 
                            </td> 
                        </tr> 
                        <tr runat="server" id="trState"
                            <td> 
                                State&nbsp; 
                            </td> 
                            <td> 
                                <asp:UpdatePanel ID="UpdatePanel2" runat="server"
                                    <ContentTemplate> 
                                        <asp:DropDownList ID="ddlState" runat="server" Width="100%" AutoPostBack="True" 
                                            OnSelectedIndexChanged="ddlState_SelectedIndexChanged"
                                        </asp:DropDownList> 
                                        <asp:SqlDataSource ID="sdsState" runat="server"></asp:SqlDataSource> 
                                        <asp:RequiredFieldValidator ID="rfvState" runat="server" ErrorMessage="*" ControlToValidate="ddlState" 
                                            ValidationGroup="Customer"></asp:RequiredFieldValidator> 
                                    </ContentTemplate> 
                                </asp:UpdatePanel> 
                            </td> 
                        </tr> 
                        <tr runat="server" width="150px" id="tr13"
                            <td> 
                                Location&nbsp; 
                            </td> 
                            <td> 
                                <asp:UpdatePanel ID="UpdatePanel3" runat="server"
                                    <ContentTemplate> 
                                        <asp:DropDownList ID="ddlLocation" runat="server" Width="100%" AutoPostBack="True" 
                                            OnSelectedIndexChanged="ddlLocation_SelectedIndexChanged"
                                        </asp:DropDownList> 
                                        <asp:SqlDataSource ID="sdsLocation" runat="server"></asp:SqlDataSource> 
                                        <asp:RequiredFieldValidator ID="rfvLocation" runat="server" ErrorMessage="*" ControlToValidate="ddlLocation" 
                                            ValidationGroup="Customer"></asp:RequiredFieldValidator> 
                                    </ContentTemplate> 
                                </asp:UpdatePanel> 
                            </td> 
                        </tr> 
                        <tr runat="server" id="trPostcode"
                            <td> 
                                Postcode&nbsp; 
                            </td> 
                            <td> 
                                <asp:UpdatePanel ID="UpdatePanel4" runat="server"
                                    <ContentTemplate> 
                                        <asp:DropDownList ID="ddlPostcode" runat="server" Width="100%"
                                        </asp:DropDownList> 
                                        <asp:SqlDataSource ID="sdsPostcode" runat="server"></asp:SqlDataSource> 
                                        <asp:RequiredFieldValidator ID="rfvPostcode" runat="server" ErrorMessage="*" ControlToValidate="ddlPostcode" 
                                            ValidationGroup="Customer"></asp:RequiredFieldValidator> 
                                    </ContentTemplate> 
                                </asp:UpdatePanel> 
                            </td> 
                        </tr> 
                    </table> 
                </Content> 
            </ajaxToolkit:AccordionPane> 
            <ajaxToolkit:AccordionPane ID="AccordionPane4" runat="server"
                <Header> 
                    <href="" style="text-decoration: none">Contact Details</a></Header
                <Content> 
                    <table id="Table3" width="500px" class="style1"
                        <tr> 
                            <td> 
                                Active? 
                            </td> 
                            <td> 
                                <asp:CheckBox ID="chkActive" runat="server" Checked='<%# DataBinder.Eval( Container, "DataItem.CustomerContactID_Active")%>'
                                </asp:CheckBox> 
                            </td> 
                        </tr> 
                        <tr runat="server" width="150px" id="tr14"
                            <td> 
                                Training Account&nbsp; 
                            </td> 
                            <td> 
                                <asp:CheckBox ID="chkTrainingAccount" runat="server" Checked='<%#DataBinder.Eval( Container, "DataItem.TrainingActive")%>' /> 
                            </td> 
                        </tr> 
                        <tr runat="server" id="trOrganiserActive"
                            <td> 
                                Organiser Active&nbsp; 
                            </td> 
                            <td> 
                                <asp:CheckBox ID="chkOrganiserActive" runat="server" Checked='<%#DataBinder.Eval( Container, "DataItem.OrganiserActive")%>' /> 
                            </td> 
                        </tr> 
                        <tr runat="server" id="trNotes"
                            <td> 
                                Notes&nbsp; 
                            </td> 
                            <td> 
                                <asp:TextBox ID="txtNotes" runat="server" TextMode="MultiLine" Width="100%" Height="150px" 
                                    Text='<%# DataBinder.Eval( Container, "DataItem.CustomerContactID_Notes") %>'></asp:TextBox> 
                                <asp:RequiredFieldValidator ID="rfvNotes" runat="server" ErrorMessage="*" ControlToValidate="txtNotes" 
                                    ValidationGroup="Customer"></asp:RequiredFieldValidator> 
                            </td> 
                        </tr> 
                        <tr runat="server" width="150px" id="tr16"
                            <td> 
                                Edited By 
                            </td> 
                            <td> 
                                <asp:TextBox ID="txtEditedBy" runat="server" Width="300" Enabled="False" Text='<%# DataBinder.Eval( Container, "DataItem.CustomerContactID_EditedBy") %>'
                                </asp:TextBox> 
                            </td> 
                        </tr> 
                        <tr runat="server" width="150px" id="tr15"
                            <td> 
                                Edited Date 
                            </td> 
                            <td> 
                                <asp:TextBox ID="txtEditedDate" runat="server" Width="300" Enabled="False" Text='<%# DataBinder.Eval( Container, "DataItem.CustomerContactID_EditedDate") %>'
                                </asp:TextBox> 
                            </td> 
                        </tr> 
                    </table> 
                </Content> 
            </ajaxToolkit:AccordionPane> 
        </Panes> 
    </ajaxToolkit:Accordion> 
    <table id="Table4" width="500px" class="style1"
        <tr> 
            <td align="right" colspan="2"
                <asp:Button ID="btnUpdate" Text="Update" runat="server" CommandName="Update" Visible='<%# !(DataItem is Telerik.Web.UI.GridInsertionObject) %>'
                </asp:Button> 
                <asp:Button ID="btnInsert" Text=