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

[Solved] RadGrid Edit/Update not working

1 Answer 236 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Michael
Top achievements
Rank 1
Michael asked on 18 Apr 2013, 10:03 AM
Here is my code.  Any help would be greatly appreciated.

ASPX:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AMEC_DCR.aspx.cs" Inherits="eB.PlugIn.AMEC.AMEC_DCR"
    MaintainScrollPositionOnPostback="true" MasterPageFile="~/Framework/MasterPages/ObjectDisplay.Master"
    ResponseEncoding="utf-8" %>
 
<%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI, Version=2013.1.403.35, Culture=neutral, PublicKeyToken=121fae78165ba3d4" %>
<asp:Content runat="server" ID="titleC" ContentPlaceHolderID="headerContents">
</asp:Content>
<asp:Content ID="body" ContentPlaceHolderID="bodyContents" runat="server">
    <asp:Table ID="Table1" runat="server">
        <asp:TableRow ID="head" runat="server">
            <asp:TableCell ID="TableCell1" runat="server" Width="137px">
                <asp:Image ID="Image1" runat="server" ImageUrl="./images/amec_logo.png" />
            </asp:TableCell>
            <asp:TableCell runat="server"><asp:Image runat="server" ID="OrgLogo"/></asp:TableCell>
            <asp:TableCell ID="TableCell2" runat="server" HorizontalAlign="Left" VerticalAlign="Middle">
                <asp:Label ID="Label1" runat="server" Font-Size="16" Text="Supplier Data Collection System" />
                <br />
                <asp:Label ID="Label5" runat="server" Text="Project: " />
                <asp:Label ID="lblProjectNameValue" runat="server" Text="TO DO" />
                <br />
                <asp:Label ID="Label6" runat="server" Text="Supplier: " />
                <asp:Label ID="lblSupplierValue" runat="server" />
                <br />
                <asp:Label ID="Label2" runat="server" Text="PO Number: " />
                <asp:Label ID="lblPoNameValue" runat="server" ForeColor="red" />
                <br />
                <br />
            </asp:TableCell></asp:TableRow>
        <asp:TableRow ID="TableRow7" runat="server">
            <asp:TableCell ID="RadGridTagsCell" runat="server" ColumnSpan="3" Visible="True">
                <telerik:RadGrid ID="RadGridTags" runat="server" AllowPaging="True" PageSize="10" OnNeedDataSource="TagDataNeedsDataSource"
                AllowFilteringByColumn="True">
                    <groupingsettings casesensitive="false"></groupingsettings>
                    <ClientSettings AllowKeyboardNavigation="true" EnablePostBackOnRowClick="true">
                        <Selecting AllowRowSelect="true"></Selecting>
                    </ClientSettings>
                    <MasterTableView Width="100%" AutoGenerateColumns="False" DataKeyNames="Tag" HeaderStyle-HorizontalAlign="Center">
                        <Columns>
                            <%--{"Discipline", "Tag", "Tag Status", "Service Description", "Functional Type", "Physical Tag Type"}--%>
                            <telerik:GridBoundColumn DataField="Discipline" DataType="System.String" HeaderText="Discipline"
                                ReadOnly="True" SortExpression="Discipline" UniqueName="Discipline">
                                </telerik:GridBoundColumn>
                            <telerik:GridBoundColumn DataField="Tag" DataType="System.String" HeaderText="Tag"
                                ReadOnly="True" SortExpression="Tag" UniqueName="Tag" ItemStyle-HorizontalAlign="Center">
                            </telerik:GridBoundColumn>
                            <telerik:GridBoundColumn DataField="TagStatus" DataType="System.String" HeaderText="Tag Status"
                                ReadOnly="True" SortExpression="Tag Status" UniqueName="TagStatus" ItemStyle-HorizontalAlign="Center">
                            </telerik:GridBoundColumn>
                            <telerik:GridBoundColumn DataField="Service Description" DataType="System.String"
                                HeaderText="Service Description" ReadOnly="True" SortExpression="Service Description"
                                UniqueName="ServiceDescription">
                            </telerik:GridBoundColumn>
                            <telerik:GridBoundColumn DataField="FunctionalType" DataType="System.String" HeaderText="Functional Type"
                                ReadOnly="True" SortExpression="Functional Type" UniqueName="FunctionalType" ItemStyle-HorizontalAlign="Center">
                            </telerik:GridBoundColumn>
                            <telerik:GridBoundColumn DataField="PhysicalType" DataType="System.String" HeaderText="Physical Type"
                                ReadOnly="True" SortExpression="Physical Type" UniqueName="PhysicalType">
                            </telerik:GridBoundColumn>
                            <telerik:GridBoundColumn DataField="Tag Maturity Level" DataType="System.String" HeaderText="Tag Maturity Level"
                                ReadOnly="True" SortExpression="Tag Maturity Level" UniqueName="TagMaturityLevel" ItemStyle-HorizontalAlign="Center">
                            </telerik:GridBoundColumn>
                        </Columns>
                    </MasterTableView>
                    <PagerStyle Mode="NextPrevAndNumeric"></PagerStyle>
                </telerik:RadGrid>
                <br/>
            </asp:TableCell>
            </asp:TableRow>
            <asp:TableRow ID="TableRow1" runat="server">
            <asp:TableCell ID="RadGridTagDetailCell" runat="server" ColumnSpan="3" Visible="True">
                <telerik:RadGrid ID="RadGridTagDetail" runat="server" AllowPaging="True" PageSize="20" AllowMultiRowEdit="True" OnNeedDataSource="TagDetailDataNeedsDataSource" OnItemCreated="RadGridTagDetail_ItemCreated"
                MasterTableView-DataKeyNames="Tag" AllowFilteringByColumn="True" OnItemEvent="RadGridTagDetail_ItemEvent" AllowAutomaticUpdates="False" OnItemCommand="RadGridTagDetail_ItemCommand" OnPreRender="RadGridTagDetail_PreRender"
                AllowSorting="True">
                    <GroupingSettings CaseSensitive="false"></GroupingSettings>
                    <MasterTableView Width="100%" AutoGenerateColumns="False" DataKeyNames="Tag" EditMode="InPlace"
                        HeaderStyle-HorizontalAlign="Center" AllowAutomaticUpdates="False" CommandItemDisplay="Top">
                        <CommandItemTemplate>
                            <asp:LinkButton runat="server" ID="UpdateAll" Text="Save Changes" CommandName="UpdateAll">Save Changes</asp:LinkButton>
                        </CommandItemTemplate>
                        <Columns>
                            <%--"Attribute", "Value", "Unit Of Measure","Type", "Category", "Review Status"--%>
                            <telerik:GridBoundColumn DataField="Attribute" DataType="System.String" HeaderText="Attribute"
                                ReadOnly="True" SortExpression="Attribute" UniqueName="Attribute">
                                </telerik:GridBoundColumn>
                            <telerik:GridTemplateColumn DataField="Value" DataType="System.String" HeaderText="Value"
                                SortExpression="Value" UniqueName="Value">
                                <ItemTemplate>
                                    <telerik:RadTextBox runat="server" Text='<%# Eval("Value")%>'></telerik:RadTextBox>
                                    </ItemTemplate>
                            </telerik:GridTemplateColumn>
                            <telerik:GridTemplateColumn HeaderText="Unit Of Measure"
                                SortExpression="Unit Of Measure" UniqueName="UnitOfMeasure">
                                <ItemTemplate>
                                    <telerik:RadComboBox ID="radComboUOM" runat="server">
                                    </telerik:RadComboBox>
                                </ItemTemplate>
                            </telerik:GridTemplateColumn>
                            <telerik:GridTemplateColumn DataField="Type" DataType="System.String" HeaderText="Type"
                                SortExpression="Type" UniqueName="Type">
                                <ItemTemplate>
                                    <asp:Label ID="lblType" runat="server" Text='<%# Eval("Type")%>'></asp:Label></ItemTemplate>
                            </telerik:GridTemplateColumn>
                            <telerik:GridTemplateColumn DataField="Category" DataType="System.String" HeaderText="Category"
                                SortExpression="Category" UniqueName="Category">
                                <ItemTemplate>
                                    <asp:Label ID="lblCategory" runat="server" Text='<%# Eval("Category")%>'></asp:Label>
                                </ItemTemplate>
                            </telerik:GridTemplateColumn>
                            <telerik:GridTemplateColumn DataField="Review Status" DataType="System.String" HeaderText="Review Status"
                                SortExpression="Review Status" UniqueName="ReviewStatus">
                                <ItemTemplate>
                                    <telerik:RadComboBox ID="radComboReviewStatus" runat="server">
                                        <Items>
                                            <telerik:RadComboBoxItem Text="Not Started" Value="0" Selected="true"></telerik:RadComboBoxItem>
                                            <telerik:RadComboBoxItem Text="Incomplete" Value="1"></telerik:RadComboBoxItem>
                                            <telerik:RadComboBoxItem Text="Requires Revision" Value="2"></telerik:RadComboBoxItem>
                                            <telerik:RadComboBoxItem Text="Complete" Value="3"></telerik:RadComboBoxItem>
                                        </Items>
                                    </telerik:RadComboBox>
                                </ItemTemplate>
                            </telerik:GridTemplateColumn>
                        </Columns>
                    </MasterTableView>
                    <ClientSettings AllowKeyboardNavigation="true">
                        <Selecting AllowRowSelect="true"></Selecting>
                    </ClientSettings>
                    <PagerStyle Mode="NextPrevAndNumeric"></PagerStyle>
                </telerik:RadGrid>
            </asp:TableCell>
            </asp:TableRow>
    </asp:Table>
    <telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server">
        <%--<img alt="Loading..." src="./images/loading.gif" style="border: 0;" />--%>
    </telerik:RadAjaxLoadingPanel>
    <telerik:RadScriptManager ID="RadScriptManager1" runat="server">
        <Scripts>
            <telerik:RadScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.Core.js" />
            <telerik:RadScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQuery.js" />
            <telerik:RadScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQueryInclude.js" />
        </Scripts>
    </telerik:RadScriptManager>
    <telerik:RadSkinManager ID="QsfSkinManager" runat="server" Skin="MetroTouch" Visible="True" />
        <telerik:RadFormDecorator ID="QsfFromDecorator" runat="server" DecoratedControls="All" EnableRoundedCorners="false" Skin="MetroTouch" Visible="False" />
        <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server" DefaultLoadingPanelID="RadAjaxLoadingPanel1">
            <AjaxSettings>
                <telerik:AjaxSetting AjaxControlID="RadGridTags">
                    <UpdatedControls>
                        <telerik:AjaxUpdatedControl ControlID="RadGridTags" />
                    </UpdatedControls>
                    <UpdatedControls>
                        <telerik:AjaxUpdatedControl ControlID="RadGridTagDetail" />
                    </UpdatedControls>
                </telerik:AjaxSetting>
                <telerik:AjaxSetting AjaxControlID="RadGridTagDetail">
                    <UpdatedControls>
                        <telerik:AjaxUpdatedControl ControlID="RadGridTagDetail" />
                    </UpdatedControls>
                </telerik:AjaxSetting>
                <%--<telerik:AjaxSetting AjaxControlID="RadAjaxManager1">
                    <UpdatedControls>
                        <telerik:AjaxUpdatedControl ControlID="RadGridTagDetail" LoadingPanelID="RadAjaxLoadingPanel1">
                        </telerik:AjaxUpdatedControl>
                    </UpdatedControls>
                </telerik:AjaxSetting>--%>
            </AjaxSettings>
        </telerik:RadAjaxManager>
</asp:Content>
Code Behind:
using System;
using System.Collections;
using System.Data;
using System.Globalization;
using System.Web.UI;
using Telerik.Web.UI;
using eB.Library.Web.UI;
 
namespace eB.PlugIn.AMEC
{
    public partial class AMEC_DCR : ObjectSpecificPage
    {
        private Utils.Data _mData;
        private string _mSPoCode;
        private DataTable _dtTagDetailData;
 
        protected void Page_Init(object sender, EventArgs e)
        {
            _mData = new Utils.Data(eBContext.eBSession);
            _mSPoCode = Request.QueryString["pocode"];
            RadGridTagDetail.ItemCommand += RadGridTagDetail_ItemCommand;
            LoadGui();
        }
 
        protected void Page_Load(object sender, EventArgs e)
        {
            for (int i = 0; i < RadGridTagDetail.PageSize; i++)
            {
                RadGridTagDetail.EditIndexes.Add(i);
            }
        }
 
        protected void RadGridTagDetail_PreRender(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                foreach (GridItem item in RadGridTagDetail.MasterTableView.Items)
                {
                    if (item is GridEditableItem)
                    {
                        GridEditableItem editableItem = item as GridDataItem;
                        editableItem.Edit = true;
                    }
                }
                RadGridTagDetail.Rebind();
            }
        }
 
        protected void Page_PreRender(object sender, EventArgs e)
        {
            if (RadGridTags.SelectedIndexes.Count == 0)
                RadGridTags.SelectedIndexes.Add(0);
 
            RadGridTagDetail.Rebind();
        }
 
        private void LoadGui()
        {
            var personNameSplit = eBContext.PersonName.Split(',');
            var currentUser = personNameSplit[1].Trim(' ');
            lblSupplierValue.Text = string.Format(" {0}", currentUser);
            lblPoNameValue.Text = _mSPoCode;
            lblProjectNameValue.Text = "Mad Dog 2";
 
            OrgLogo.ImageUrl = _mData.GetOrganizationLogo(Server.MapPath(@"~\PlugIns\AMEC\images"));
            //lblProjectNameValue.Text = _mData.GetPoPrimaryPi(_mSPoCode);
        }
 
        int _totalItemCount;
        protected void RadGridTagDetail_ItemCreated(object sender, GridItemEventArgs e)
        {
            var gridPagerItem = e.Item as GridPagerItem;
            if (gridPagerItem != null)
            {
                var pagerItem = gridPagerItem;
                var pageSizeCombo = (RadComboBox)pagerItem.FindControl("PageSizeComboBox");
                var item1 = new RadComboBoxItem("All", _totalItemCount.ToString(CultureInfo.InvariantCulture));
                item1.Attributes.Add("ownerTableViewId", gridPagerItem.OwnerTableView.ClientID);
                pageSizeCombo.Items.Add(item1);
            }
 
            if (e.Item.ItemType != GridItemType.Item && e.Item.ItemType != GridItemType.AlternatingItem) return;
 
            var item = (GridDataItem)e.Item;
            item.Edit = true;
 
            var comboBoxUom = (RadComboBox)(item.FindControl("radComboUOM"));
            var comboBoxReviewStatus = (RadComboBox) (item.FindControl("radComboReviewStatus"));
            comboBoxReviewStatus.SelectedIndex = 0;
 
            if (comboBoxUom == null) return;
 
            var dataRow = item.DataItem as DataRowView;
            if (dataRow == null) return;
 
            var attName = dataRow["Attribute"].ToString();
            var currentVal = dataRow["Unit Of Measure"].ToString();
            var values = _mData.GetUomValueList(item.GetDataKeyValue("Tag").ToString(), attName);
 
            if (values.Count == 0)
                return;
 
            comboBoxUom.DataSource = values;
            comboBoxUom.SelectedValue = currentVal;
        }
 
        protected void RadGridTagDetail_ItemEvent(object sender, GridItemEventArgs e)
        {
            if (e.EventInfo is GridInitializePagerItem)
            {
                _totalItemCount = (e.EventInfo as GridInitializePagerItem).PagingManager.DataSourceCount;
            }
        }
 
        protected void TagDetailDataNeedsDataSource(object sender, GridNeedDataSourceEventArgs e)
        {
            _dtTagDetailData = (DataTable)ViewState[RadGridTags.SelectedValue.ToString()];
 
            if (_dtTagDetailData == null)
            {
                _dtTagDetailData = _mData.GetTagDetailsData(RadGridTags.SelectedValue.ToString());
                ViewState[RadGridTags.SelectedValue.ToString()] = _dtTagDetailData;
            }
 
            RadGridTagDetail.DataSource = _dtTagDetailData;
        }
 
        protected void TagDataNeedsDataSource(object sender, GridNeedDataSourceEventArgs e)
        {
            var dtTagData = (DataTable)ViewState[_mSPoCode];
 
            if (dtTagData == null)
            {
                dtTagData = _mData.GetPoTagData(_mSPoCode);
                ViewState[_mSPoCode] = dtTagData;
            }
 
            RadGridTags.DataSource = dtTagData;
            RadGridTags.SelectedIndexes.Add(0);
        }
 
        protected void RadGridTagDetail_ItemCommand(object source, GridCommandEventArgs e)
        {
            if (e.CommandName != "UpdateAll") return;
 
            if (RadGridTagDetail.EditIndexes.Count == 0)
        {
            return;
        }
 
        foreach (GridDataItem item in RadGridTagDetail.EditItems)
        {
            UpdateItem(item.EditFormItem);
        }
 
        e.Item.OwnerTableView.Rebind();
    }
 
        private void UpdateItem(GridEditableItem editedItem)
        {
            if (editedItem == null)
                return;
            //Locate the changed row in the DataSource
            var changedRows = _dtTagDetailData.Select("Tag = '" + editedItem.GetDataKeyValue("Tag") + "'");
 
            if (changedRows.Length != 1)
            {
                return;
            }
 
            //Update new values
            var newValues = new Hashtable();
            //The GridTableView will fill the values from all editable columns in the hash
            editedItem.OwnerTableView.ExtractValuesFromItem(newValues, editedItem);
 
            var changedRow = changedRows[0];
            changedRow.BeginEdit();
            try
            {
                foreach (DictionaryEntry entry in newValues)
                {
                    changedRow[(string)entry.Key] = entry.Value;
                }
                changedRow.EndEdit();
            }
            catch (Exception)
            {
                changedRow.CancelEdit();
            }
        }
    }
}

1 Answer, 1 is accepted

Sort by
0
Andrey
Telerik team
answered on 23 Apr 2013, 07:14 AM
Hi,

Thank you for contacting us.

When performing manual operation it is better to use the respective command event - OnUpdateCommand, OnInsertCommand, OnDeleteCommand as described in this help topic.

Give this suggestion a try and you should succeed.

Regards,
Andrey
the Telerik team
If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed now.
Tags
Grid
Asked by
Michael
Top achievements
Rank 1
Answers by
Andrey
Telerik team
Share this question
or