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

Unable to add/Delete Rows

1 Answer 145 Views
GridView
This is a migrated thread and some comments may be shown as answers.
kalyan gupta
Top achievements
Rank 1
kalyan gupta asked on 10 Aug 2010, 10:14 AM
Hi @

I am using Silverlight 4.0 Telerik Rad Grid in one of my applications.

I am binding the Grid with System.Collections.Generic.List<MyClass>

When I Select Add/Delete from Right Click on the Grid, It does not work. Edit is working as expected. I am getting the editted objects in the Save event.

What I want to achieve is :

 

 

  • When User Selects "Add" then a New Row should be added to the Grid. The entries made to Newly added rows should be accessible in Save event the form of objects of List<>. So that these rows can be saved in to database. Here User can click on "Add" and number of times. I want to achieve the same on "Add New Row" button click also
  • When User Selects "Delete" then selected row should be deleted. In Save event that particular object should not be visible in the List<>.

I have coded as adviced in demos and documentation but with below code I am unable to meet the requirements.


#region Namespaces
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Telerik.Windows.Controls;
using Telerik.Windows.Controls.GridView;
using Telerik.Windows;
using System.IO;
using System.Xml.Linq;
using System.Windows.Data;
using System.Globalization;
using System.Collections;
#endregion

    /// <summary>
    ///
    /// </summary>
    public partial class uctrlAddUpdateGrid : UserControl
    {  
        /// <summary>
        ///
        /// </summary>
        /// <param name="pstrSelectedProgram"></param>
        public uctrlAddUpdateGrid(string pstrSelectedProgram)
        {
            InitializeComponent();
            this.BindDataGrid(pstrSelectedProgram);
        }      
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void RadContextMenu_ItemClick(object sender, RadRoutedEventArgs e)
        {
            RadContextMenu menu = (RadContextMenu)sender;
            RadMenuItem clickedItem = e.OriginalSource as RadMenuItem;
            GridViewRow row = menu.GetClickedElement<GridViewRow>();

            if (clickedItem != null && row != null)
            {
                string header = Convert.ToString(clickedItem.Header);

                switch (header)
                {
                    case "Add":
                        this.AddNewRow();
                        break;
                    case "Edit":
                        radGridView1.BeginEdit();
                        break;
                    case "Delete":
                        radGridView1.Items.Remove(row.DataContext);
                        break;
                    default:
                        break;
                }
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void RadContextMenu_Opened(object sender, RoutedEventArgs e)
        {
            RadContextMenu menu = (RadContextMenu)sender;
            GridViewRow row = menu.GetClickedElement<GridViewRow>();

            if (row != null)
            {
                row.IsSelected = row.IsCurrent = true;             
                GridViewCell cell = menu.GetClickedElement<GridViewCell>();
                if (cell != null)
                {
                    cell.IsCurrent = true;
                }
            }
            else
            {
                menu.IsOpen = false;
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnExporttoExcel_Click(object sender, RoutedEventArgs e)
        {
            string extension = "";
            ExportFormat format = ExportFormat.Html;

            extension = "xls";
            format = ExportFormat.Html;

            SaveFileDialog dialog = new SaveFileDialog();
            dialog.DefaultExt = extension;
            dialog.Filter = String.Format("{1} files (*.{0})|*.{0}|All files (*.*)|*.*", extension, "Excel");
            dialog.FilterIndex = 1;

            if (dialog.ShowDialog() == true)
            {
                using (Stream stream = dialog.OpenFile())
                {
                    GridViewExportOptions exportOptions = new GridViewExportOptions();
                    exportOptions.Format = format;
                    exportOptions.ShowColumnFooters = true;
                    exportOptions.ShowColumnHeaders = true;
                    exportOptions.ShowGroupFooters = true;

                    radGridView1.Export(stream, exportOptions);
                }
            }

            MessageBox.Show("Export to Excel is under construction.");
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnAddNewRow_Click(object sender, RoutedEventArgs e)
        {           
            this.AddNewRow();
        }
        /// <summary>
        ///
        /// </summary>
        private void AddNewRow()
        {           
            radGridView1.BeginInsert();
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnSaveInsertEdit_Click(object sender, RoutedEventArgs e)
        {                       
            int lintRows = 0;           
            IEnumerable<ComboItemsCollections> lIEnumModifiedRows;
            lIEnumModifiedRows = ((System.Collections.Generic.IEnumerable<ComboItemsCollections>)radGridView1.ItemsSource).Where(c => c.IsRowModified == "Y");           
           
            foreach (ComboItemsCollections obj in lIEnumModifiedRows)
            {
                if (obj.IsRowModified == "Y")
                {
                    obj.IsRowModified = "N";
                    lintRows++;
                }
            }
            MessageBox.Show(lintRows.ToString() + " Rows got modified in the Data Grid.");
            MessageBox.Show("Save Insert Edit is under construction.");
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnCancelInsertEdit_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("Cancel Insert Edit is under construction.");
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void RadGridView1_ElementExporting(object sender, GridViewElementExportingEventArgs e)
        {
            if (e.Element == ExportElement.HeaderRow || e.Element == ExportElement.FooterRow
                || e.Element == ExportElement.GroupFooterRow)
            {
                e.FontSize = 10;
                e.FontWeight = FontWeights.Bold;
            }
        }      
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void radGridView1_RowEditEnded(object sender, GridViewRowEditEndedEventArgs e)
        {
            ((ComboItemsCollections)(((sender as RadGridView).CurrentCell as GridViewCell).ParentRow.DataContext)).IsRowModified = "Y";
            if (e.EditOperationType == GridViewEditOperationType.Insert)
            {
                ((System.Collections.Generic.IEnumerable<ComboItemsCollections>)radGridView1.ItemsSource).ToList().Add((ComboItemsCollections)e.NewData);
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void radGridView1_AddingNewDataItem(object sender, GridViewAddingNewEventArgs e)
        {
            e.NewObject = new ComboItemsCollections();
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="pstrSelectedProgram"></param>
        private void BindDataGrid(string pstrSelectedProgram)
        {           
            List<ComboItemsCollections> llstCmbItemColl;
            ComboItemsCollections lobjCmbItemColl;
            llstCmbItemColl = new List<ComboItemsCollections>();
            try
            {

                for (int i = 0; i < 100000; i++)
                {
                    lobjCmbItemColl = new ComboItemsCollections();
                    if (i % 10000 == 0)
                    {
                        lobjCmbItemColl.Program = "Program - 1";
                    }
                    else if (i % 10000 == 1)
                    {
                        lobjCmbItemColl.Program = "Program - 2";
                    }
                    else
                    {
                        lobjCmbItemColl.Program = "";
                    }
                    lobjCmbItemColl.FirstName = "First Name_" + (i + 1).ToString();
                    lobjCmbItemColl.MiddleName = "Middle Name_" + (i + 1).ToString();
                    lobjCmbItemColl.LastName = "Last Name_" + (i + 1).ToString();
                    lobjCmbItemColl.Country = "Country_" + (i + 1).ToString();
      lobjCmbItemColl.IsRowModified = "N";

                    llstCmbItemColl.Add(lobjCmbItemColl);
                }
                radGridView1.ItemsSource = llstCmbItemColl.Where(c => c.Program == pstrSelectedProgram);

            }
            catch (Exception ex)
            {

            }
            finally
            {
                lobjCmbItemColl = null;
                llstCmbItemColl = null;
            }
        }
    }
    /// <summary>
    ///
    /// </summary>
    public class ComboItemsCollections
    {
        #region Variables
        string pstrFirstName;
        string pstrMiddleName;
        string pstrLastName;
        string pstrCountry;
 string pstrIsRowModified;
        #endregion
        /// <summary>
        ///
        /// </summary>
        public ComboItemsCollections()
        {
            pstrFirstName = string.Empty;
            pstrMiddleName = string.Empty;
            pstrLastName = string.Empty;
            pstrCountry = string.Empty;
     pstrIsRowModified =string.Empty;
        }
        #region Properties       
        public string FirstName
        {
            get { return pstrFirstName; }
            set { pstrFirstName = value; }
        }
        public string MiddleName
        {
            get { return pstrMiddleName; }
            set { pstrMiddleName = value; }
        }
        public string LastName
        {
            get { return pstrLastName; }
            set { pstrLastName = value; }
        }
        public string Country
        {
            get { return pstrCountry; }
            set { pstrCountry = value; }
        }       
        public string IsRowModified
        {
            get { return pstrIsRowModified; }
            set { pstrIsRowModified = value; }
        }
        #endregion       
    }

 

 

 

 

 

 

 

 

 

 

 

 

 

  <StackPanel Orientation="Horizontal" Margin="10,10,0,0">
                <Button FontFamily="Arial" Content="Export to Excel" Grid.Row="1" Height="23" HorizontalAlignment="Left" Name="btnExporttoExcel"   VerticalAlignment="Center" Click="btnExporttoExcel_Click" Width="100" />
                <Button FontFamily="Arial" Content="Add New Row" Grid.Row="1" Height="23" HorizontalAlignment="Left" Name="btnAddNewRow" VerticalAlignment="Center"   Click="btnAddNewRow_Click" Width="100" Margin="10,0,0,0"/>
                <Button FontFamily="Arial" Content="Save insert/edit" Grid.Row="1" Height="23" HorizontalAlignment="Left" Name="btnSaveInsertEdit"   VerticalAlignment="Center" Click="btnSaveInsertEdit_Click" Width="100" Margin="10,0,0,0"/>
                <Button FontFamily="Arial" Content="Cancel insert/edit" Grid.Row="1" Height="23" HorizontalAlignment="Left" Name="btnCancelInsertEdit"   VerticalAlignment="Center" Click="btnCancelInsertEdit_Click" Width="100" Margin="10,0,0,0"/>
            </StackPanel>

            <Border telerikQuickStart:ThemeAwareBackgroundBehavior.IsEnabled="True" />
            <telerik:RadGridView FrozenColumnCount="5" FontFamily="Arial"  AutoGenerateColumns="False" HorizontalAlignment="Left" Name="radGridView1"        VerticalAlignment="Top" Height="380" CanUserDeleteRows="True" Margin="10,10,0,0" RowEditEnded="radGridView1_RowEditEnded"      AddingNewDataItem="radGridView1_AddingNewDataItem">
                <telerik:RadContextMenu.ContextMenu>
                    <telerik:RadContextMenu Opened="RadContextMenu_Opened" ItemClick="RadContextMenu_ItemClick">
                        <telerik:RadContextMenu.Items>
                            <telerik:RadMenuItem Header="Add" />
                            <telerik:RadMenuItem Header="Edit" />
                            <telerik:RadMenuItem Header="Delete" />
                        </telerik:RadContextMenu.Items>
                    </telerik:RadContextMenu>
                </telerik:RadContextMenu.ContextMenu>
                <telerik:RadGridView.Columns>
                    <telerik:GridViewColumn>
                        <telerik:GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <telerik:RadButton Content="-" CommandParameter="{Binding}"/>
                            </DataTemplate>
                        </telerik:GridViewColumn.CellTemplate>
                    </telerik:GridViewColumn>                    
                    <telerik:GridViewDataColumn DataMemberBinding="{Binding FirstName}" Header="First Name"></telerik:GridViewDataColumn>
                    <telerik:GridViewDataColumn DataMemberBinding="{Binding MiddleName}" Header="Middle Name"></telerik:GridViewDataColumn>
                    <telerik:GridViewDataColumn DataMemberBinding="{Binding LastName}" Header="Last Name"></telerik:GridViewDataColumn>
                    <telerik:GridViewDataColumn DataMemberBinding="{Binding Country}" Header="Country"></telerik:GridViewDataColumn>                   
                </telerik:RadGridView.Columns>
            </telerik:RadGridView>



Please let me know how to proceed.

Thanks in advance
Kalyan Gupta

1 Answer, 1 is accepted

Sort by
0
Maya
Telerik team
answered on 13 Aug 2010, 09:48 AM
Hello kalyan gupta,

I have implemented the code snippets you have sent into a sample project, but I have not been able to reproduce the incapability of adding/deleting items and in both cases - when adding or deleting - the definite item is inserted/removed from the ItemsSource of the grid. So, please provide more details about your project, its settings and any other important specification. It would be great if you could send us a sample project.

 

Kind regards,
Maya
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
GridView
Asked by
kalyan gupta
Top achievements
Rank 1
Answers by
Maya
Telerik team
Share this question
or