Hello
I contact you because I have been a problem for several days and I can not find the solution
I have a bound radgridview control in readonly. I allow to search row.
When I write something in the search row, my application is crashing.
You can download my simple example HERE
Thank you for your help
Good job, the telerik team ;-)
Fabrizio
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using Telerik.WinControls;using Telerik.WinControls.UI;namespace test{ public partial class RadForm1 : Telerik.WinControls.UI.RadForm { #region School class public class School { public Guid Id { get; set; } public string Name { get; set; } public short SchoolYear { get; set; } public string Locality { get; set; } public string Titulaire { get; set; } public short Degre { get; set; } public List<Student> Students = new List<Student>(); public void AddStudent(Student student) { Students.Add(student); } public void RemoveStudent(Student student) { Students.Remove(student); } public int NombreEleve => Students.Count; } #endregion #region Student class public class Student { public Guid Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public Guid IdSchool { get; set; } public List<Cote> Cotes = new List<Cote>(); public School School = new School(); public string FullName => $"{LastName} {FirstName}"; public string SchoolName => School.Name; public int NombreCote => Cotes.Count; public void AddCote(Cote cote) { Cotes.Add(cote); } public void RemoveCote(Cote cote) { Cotes.Remove(cote); } } #endregion #region Discipline class public class Discipline { public Guid Id { get; set; } public string Name { get; set; } public List<Control> Controls = new List<Control>(); public int NombreControle => Controls.Count; public void AddControl(Control control) { Controls.Add(control); } public void RemoveControl(Control control) { Controls.Remove(control); } } #endregion #region Control class public class Control { public Guid Id { get; set; } public string Title { get; set; } public DateTime Date { get; set; } public decimal Quotation { get; set; } public short Period { get; set; } public Guid IdDiscipline { get; set; } public Discipline Discipline { get; set; } public List<Cote> Cotes = new List<Cote>(); public void AddCote(Cote cote) { Cotes.Add(cote); } public void RemoveCote(Cote cote) { Cotes.Remove(cote); } public string DisciplineName => Discipline.Name; public int NombreCote => Cotes.Count; } #endregion #region Cote class public class Cote { public enum eQuotationState { Top = 0, Defeat, Average, Good, Absent } public Guid IdStudent { get; set; } public Guid IdControl { get; set; } public DateTime Date { get; set; } public decimal? Quotation { get; set; } public Guid Id { get; set; } public Control Control { get; set; } public Student Student { get; set; } public string FullNameStudent => Student?.FullName; public Guid? IdSchool => Student?.IdSchool; public string SchoolName => Student?.SchoolName; public string ControlTitle => Control?.Title; public Int16? ControlPeriod => Control?.Period; public Guid? IdDiscipline => Control?.IdDiscipline; public string DisciplineName => Control?.DisciplineName; public decimal ControlQuotation => Control?.Quotation ?? 0M; public bool IsAbsent => (Quotation == null); public eQuotationState QuotationState => ( IsAbsent ? eQuotationState.Absent : (Quotation < (Control.Quotation / 2)) ? eQuotationState.Defeat : (Quotation == (Control.Quotation / 2)) ? eQuotationState.Average : (Quotation == Control.Quotation) ? eQuotationState.Top : eQuotationState.Good ); } #endregion private BindingList<School> _schools = new BindingList<School>(); private BindingList<Student> _students = new BindingList<Student>(); private BindingList<Discipline> _disciplines = new BindingList<Discipline>(); private BindingList<Control> _controls = new BindingList<Control>(); private BindingList<Cote> _cotes = new BindingList<Cote>(); public RadForm1() { CreateDatas(); InitializeComponent(); CreateBoundQuotationGrid(); } private void CreateDatas() { var school1 = new School { Id = Guid.NewGuid(), Degre = 1, Name = "School 1", SchoolYear = 2019, Titulaire = "Name 1" }; _schools.Add(school1); var student1 = new Student { Id = Guid.NewGuid(), FirstName = "Toto", LastName = "Toto", School = school1, IdSchool = school1.Id }; var student2 = new Student { Id = Guid.NewGuid(), FirstName = "Tata", LastName = "Tata", School = school1, IdSchool = school1.Id }; _students.Add(student1); _students.Add(student2); school1.Students.AddRange(_students.Where(x => x.IdSchool == school1.Id)); var discipline1 = new Discipline { Id = Guid.NewGuid(), Name = "French" }; var discipline2 = new Discipline { Id = Guid.NewGuid(), Name = "English" }; _disciplines.Add(discipline1); _disciplines.Add(discipline2); var control1 = new Control { Id = Guid.NewGuid(), Discipline = discipline1, IdDiscipline = discipline1.Id, Date = DateTime.Now, Period = 1, Title = "French control 1", Quotation = 10M }; var control2 = new Control { Id = Guid.NewGuid(), Discipline = discipline1, IdDiscipline = discipline1.Id, Date = DateTime.Now, Period = 1, Title = "French control 2", Quotation = 20M }; var control3 = new Control { Id = Guid.NewGuid(), Discipline = discipline1, IdDiscipline = discipline1.Id, Date = DateTime.Now, Period = 2, Title = "French control 3", Quotation = 30M }; var control4 = new Control { Id = Guid.NewGuid(), Discipline = discipline2, IdDiscipline = discipline2.Id, Date = DateTime.Now, Period = 2, Title = "Ensglish control 1", Quotation = 100M }; var control5 = new Control { Id = Guid.NewGuid(), Discipline = discipline2, IdDiscipline = discipline2.Id, Date = DateTime.Now, Period = 2, Title = "Ensglish control 2", Quotation = 200M }; var control6 = new Control { Id = Guid.NewGuid(), Discipline = discipline2, IdDiscipline = discipline2.Id, Date = DateTime.Now, Period = 1, Title = "Ensglish control 3", Quotation = 300M }; _controls.Add(control1); _controls.Add(control2); _controls.Add(control3); _controls.Add(control4); _controls.Add(control5); _controls.Add(control6); discipline1.Controls.AddRange(_controls.Where(x => x.IdDiscipline == discipline1.Id)); discipline2.Controls.AddRange(_controls.Where(x => x.IdDiscipline == discipline2.Id)); var cote1 = new Cote { Id = Guid.Empty, Date = DateTime.Now, Control = control1, IdControl = control1.Id, Student = student1, IdStudent = student1.Id, Quotation = 10M }; var cote2 = new Cote { Id = Guid.Empty, Date = DateTime.Now, Control = control1, IdControl = control1.Id, Student = student2, IdStudent = student2.Id, Quotation = 0M }; var cote3 = new Cote { Id = Guid.Empty, Date = DateTime.Now, Control = control2, IdControl = control2.Id, Student = student1, IdStudent = student1.Id, Quotation = 10M }; var cote4 = new Cote { Id = Guid.Empty, Date = DateTime.Now, Control = control3, IdControl = control3.Id, Student = student1, IdStudent = student1.Id, Quotation = 30M }; var cote5 = new Cote { Id = Guid.Empty, Date = DateTime.Now, Control = control4, IdControl = control4.Id, Student = student2, IdStudent = student2.Id, Quotation = 100M }; var cote6 = new Cote { Id = Guid.Empty, Date = DateTime.Now, Control = control5, IdControl = control5.Id, Student = student2, IdStudent = student2.Id, Quotation = default(decimal?) }; var cote7 = new Cote { Id = Guid.Empty, Date = DateTime.Now, Control = control6, IdControl = control6.Id, Student = student1, IdStudent = student1.Id, Quotation = 200M }; var cote8 = new Cote { Id = Guid.Empty, Date = DateTime.Now, Control = control6, IdControl = control6.Id, Student = student2, IdStudent = student2.Id, Quotation = 0M }; _cotes.Add(cote1); _cotes.Add(cote2); _cotes.Add(cote3); _cotes.Add(cote4); _cotes.Add(cote5); _cotes.Add(cote6); _cotes.Add(cote7); _cotes.Add(cote8); student1.Cotes.AddRange(_cotes.Where(x => x.IdStudent == student1.Id)); student2.Cotes.AddRange(_cotes.Where(x => x.IdStudent == student2.Id)); control1.Cotes.AddRange(_cotes.Where(x => x.IdControl == control1.Id)); control2.Cotes.AddRange(_cotes.Where(x => x.IdControl == control2.Id)); control3.Cotes.AddRange(_cotes.Where(x => x.IdControl == control3.Id)); control4.Cotes.AddRange(_cotes.Where(x => x.IdControl == control4.Id)); control5.Cotes.AddRange(_cotes.Where(x => x.IdControl == control5.Id)); control6.Cotes.AddRange(_cotes.Where(x => x.IdControl == control6.Id)); } /// <summary> /// Création des DGV adéquats /// </summary> private void CreateBoundQuotationGrid() { using (this.radGridView1.DeferRefresh()) { radGridView1.ShowFilteringRow = true; radGridView1.EnableFiltering = true; radGridView1.MasterTemplate.Reset(); radGridView1.MasterTemplate.ShowTotals = true; radGridView1.MasterTemplate.AddNewBoundRowBeforeEdit = true; radGridView1.MasterView.TableAddNewRow.IsPinned = true; radGridView1.MasterView.TableAddNewRow.PinPosition = PinnedRowPosition.Top; radGridView1.MasterView.TableSearchRow.CloseOnEscape = false; radGridView1.MasterView.TableSearchRow.ShowCloseButton = false; radGridView1.TableElement.RowHeaderColumnWidth = 50; // Ajouter la ligne des totaux radGridView1.SummaryRowsBottom.Add(new GridViewSummaryRowItem(new GridViewSummaryItem[] { new GridViewSummaryItem("CoteColumn", "Total {0:N2}", GridAggregateFunction.Sum), new GridViewSummaryItem("NomEleveColumn", "{0} cotes", GridAggregateFunction.Count) })); radGridView1.MasterView.SummaryRows[0].IsPinned = true; radGridView1.MasterView.SummaryRows[0].PinPosition = PinnedRowPosition.Bottom; radGridView1.BottomPinnedRowsMode = GridViewBottomPinnedRowsMode.Fixed; radGridView1.MasterTemplate.Columns.Add(new GridViewComboBoxColumn("PeriodeColumn", "ControlPeriod") { HeaderText = "Period", TextAlignment = ContentAlignment.MiddleCenter, HeaderTextAlignment = ContentAlignment.MiddleCenter, AutoSizeMode = BestFitColumnMode.AllCells, MinWidth = 80, DropDownStyle = RadDropDownStyle.DropDownList, FilteringMode = GridViewFilteringMode.DisplayMember }); radGridView1.MasterTemplate.Columns.Add(new GridViewComboBoxColumn("DisciplineColumn", "IdDiscipline") { HeaderText = "Discipline", TextAlignment = ContentAlignment.MiddleLeft, HeaderTextAlignment = ContentAlignment.MiddleCenter, AutoSizeMode = BestFitColumnMode.AllCells, MinWidth = 160, DropDownStyle = RadDropDownStyle.DropDownList, ValueMember = "Id", DisplayMember = "Name", FilteringMode = GridViewFilteringMode.DisplayMember, Tag = false }); radGridView1.MasterTemplate.Columns.Add(new GridViewComboBoxColumn("LibelleControleColumn", "IdControl") { HeaderText = "Control title", TextAlignment = ContentAlignment.MiddleLeft, HeaderTextAlignment = ContentAlignment.MiddleCenter, AutoSizeMode = BestFitColumnMode.AllCells, WrapText = true, MinWidth = 160, DropDownStyle = RadDropDownStyle.DropDownList, ValueMember = "Id", DisplayMember = "Title", FilteringMode = GridViewFilteringMode.DisplayMember, Tag = false }); radGridView1.MasterTemplate.Columns.Add(new GridViewComboBoxColumn("LibelleClasseColumn", "IdSchool") { HeaderText = "School name", TextAlignment = ContentAlignment.MiddleLeft, HeaderTextAlignment = ContentAlignment.MiddleCenter, AutoSizeMode = BestFitColumnMode.AllCells, WrapText = true, MinWidth = 160, DropDownStyle = RadDropDownStyle.DropDownList, ValueMember = "Id", DisplayMember = "Name", FilteringMode = GridViewFilteringMode.DisplayMember, Tag = false }); radGridView1.MasterTemplate.Columns.Add(new GridViewComboBoxColumn("NomEleveColumn", "IdStudent") { HeaderText = "Student fullname", TextAlignment = ContentAlignment.MiddleLeft, HeaderTextAlignment = ContentAlignment.MiddleCenter, AutoSizeMode = BestFitColumnMode.AllCells, MinWidth = 160, DropDownStyle = RadDropDownStyle.DropDownList, ValueMember = "Id", DisplayMember = "FullName", FilteringMode = GridViewFilteringMode.DisplayMember, Tag = false }); radGridView1.MasterTemplate.Columns.Add(new GridViewDateTimeColumn("DateColumn", "Date") { HeaderText = "Date", TextAlignment = ContentAlignment.MiddleCenter, HeaderTextAlignment = ContentAlignment.MiddleCenter, AutoSizeMode = BestFitColumnMode.AllCells, MinWidth = 100, MaxWidth = 100, Format = DateTimePickerFormat.Short, FormatString = "{0:d}", Tag = true }); radGridView1.MasterTemplate.Columns.Add(new GridViewDecimalColumn("CoteColumn", "Quotation") { HeaderText = "Quotation", TextAlignment = ContentAlignment.MiddleCenter, HeaderTextAlignment = ContentAlignment.MiddleCenter, AutoSizeMode = BestFitColumnMode.AllCells, DecimalPlaces = 2, ShowUpDownButtons = false, AllowGroup = false, Minimum = 0, MinWidth = 130, Tag = true }); radGridView1.MasterTemplate.Columns.Add(new GridViewDecimalColumn("QuotationStateColumn", "QuotationState") { HeaderText = "State", TextAlignment = ContentAlignment.MiddleCenter, HeaderTextAlignment = ContentAlignment.MiddleCenter, AutoSizeMode = BestFitColumnMode.AllCells, DecimalPlaces = 2, ShowUpDownButtons = false, ReadOnly = true }); } } public void SetBindingColumnsQuotation() { var periodColumn = (this.radGridView1.MasterTemplate.Columns["PeriodeColumn"] as GridViewComboBoxColumn); periodColumn.DataSource = _controls.Select(x => x.Period).Distinct().OrderBy(x => x); var matiereColumn = (this.radGridView1.MasterTemplate.Columns["DisciplineColumn"] as GridViewComboBoxColumn); matiereColumn.DataSource = _controls.Select(x => x.Discipline).Distinct().OrderBy(x => x.Name); var controlColumn = (this.radGridView1.MasterTemplate.Columns["LibelleControleColumn"] as GridViewComboBoxColumn); controlColumn.DataSource = _controls.OrderBy(x => x.Title); var schoolColumn = (this.radGridView1.MasterTemplate.Columns["LibelleClasseColumn"] as GridViewComboBoxColumn); schoolColumn.DataSource = _students.Select(x => x.School).Distinct().OrderBy(x => x.Name); var studentColumn = (this.radGridView1.MasterTemplate.Columns["NomEleveColumn"] as GridViewComboBoxColumn); studentColumn.DataSource = _students.OrderBy(x => x.FullName); } private void RadForm1_Load(object sender, EventArgs e) { using (radGridView1.DeferRefresh()) radGridView1.DataSource = _cotes; radGridView1.MasterTemplate.BestFitColumns(BestFitColumnMode.AllCells); SetBindingColumnsQuotation(); WindowState = FormWindowState.Maximized; } }}