private void SetBoundValue(IDataItem dataItem, string propertyName, object value) { object dataBoundItem = dataItem.DataBoundItem; if (dataBoundItem == null) { return; } Type type = dataBoundItem.GetType(); if (this.propertyDescriptors == null) { this.propertyDescriptors = new Dictionary <Type, PropertyDescriptorCollection>(); } if (!this.propertyDescriptors.ContainsKey(type)) { this.propertyDescriptors.Add(type, TypeDescriptor.GetProperties(dataBoundItem)); } PropertyDescriptor propertyDescriptor = this.propertyDescriptors[type].Find(propertyName, !this.Template.ListSource.UseCaseSensitiveFieldNames); if (propertyDescriptor == null) { this.propertyDescriptors[type] = TypeDescriptor.GetProperties(dataBoundItem); propertyDescriptor = this.propertyDescriptors[type].Find(propertyName, !this.Template.ListSource.UseCaseSensitiveFieldNames); } if (propertyDescriptor == null) { return; } GridViewObjectRelationalDataProvider hierarchyDataProvider = this.Template.HierarchyDataProvider as GridViewObjectRelationalDataProvider; hierarchyDataProvider?.SuspendNotifications(); if (value == null) { try { propertyDescriptor.SetValue(dataBoundItem, value); } catch { propertyDescriptor.SetValue(dataBoundItem, (object)DBNull.Value); } } else { Type underlyingType = Nullable.GetUnderlyingType(propertyDescriptor.PropertyType); if (propertyDescriptor.Converter != null && (object)underlyingType != null && underlyingType.IsGenericType) { value = propertyDescriptor.Converter.ConvertFromInvariantString(value.ToString()); } propertyDescriptor.SetValue(dataBoundItem, value); } hierarchyDataProvider?.ResumeNotifications(); }
public GridViewRowInfo EndAddNewRow() { if (!this.newRowInitialized || !this.IsModified) { return((GridViewRowInfo)null); } GridViewCollectionChangingEventArgs args1 = new GridViewCollectionChangingEventArgs(this.ViewTemplate, Telerik.WinControls.Data.NotifyCollectionChangedAction.Add, (object)null, this.ViewTemplate.Rows.Count, -1); this.ViewTemplate.EventDispatcher.RaiseEvent <GridViewCollectionChangingEventArgs>(EventDispatcher.RowsChanging, (object)this.ViewTemplate, args1); if (args1.Cancel) { return((GridViewRowInfo)null); } GridViewRowCancelEventArgs args2 = new GridViewRowCancelEventArgs(new GridViewRowInfo[1] { (GridViewRowInfo)this }); this.ViewTemplate.EventDispatcher.RaiseEvent <GridViewRowCancelEventArgs>(EventDispatcher.UserAddingRow, (object)this.ViewTemplate, args2); if (args2.Cancel) { return((GridViewRowInfo)null); } if (this.ViewTemplate.IsVirtualRows) { GridViewObjectRelationalDataProvider hierarchyDataProvider = this.ViewTemplate.HierarchyDataProvider as GridViewObjectRelationalDataProvider; GridViewRowInfo rowInfo = (GridViewRowInfo)this; if (hierarchyDataProvider != null && this.ViewTemplate.AutoUpdateObjectRelationalSource) { rowInfo = hierarchyDataProvider.AddNewRow(this) ?? (GridViewRowInfo)this; this.ViewInfo.Refresh(); if (rowInfo != this) { if (!this.deferUserAddedRow) { GridViewRowEventArgs args3 = new GridViewRowEventArgs(rowInfo); this.ViewTemplate.EventDispatcher.RaiseEvent <GridViewRowEventArgs>(EventDispatcher.UserAddedRow, (object)this.ViewTemplate, args3); } else { this.addedRow = rowInfo; this.deferUserAddedRow = false; } if (this.moveToLastRow) { rowInfo.IsCurrent = true; this.moveToLastRow = false; } else { this.ViewTemplate.MasterTemplate.CurrentRow = (GridViewRowInfo)this.ViewInfo.TableAddNewRow; } } } else { GridViewRowEventArgs args3 = new GridViewRowEventArgs((GridViewRowInfo)this); this.ViewTemplate.EventDispatcher.RaiseEvent <GridViewRowEventArgs>(EventDispatcher.UserAddedRow, (object)this.ViewTemplate, args3); } GridViewSynchronizationService.DispatchEvent(this.ViewTemplate, new GridViewEvent((object)this.ViewTemplate, (object)this.ViewTemplate, new object[1] { (object)new DataViewChangedEventArgs(ViewChangedAction.Add, (object)this) }, new GridViewEventInfo(KnownEvents.ViewChanged, GridEventType.Both, GridEventDispatchMode.Send)), false); return(rowInfo); } int count = this.ViewTemplate.ListSource.Count; GridViewRowInfo rowInfo1 = this.boundRow; try { this.ViewTemplate.Rows.addingThroughUI = true; this.ViewTemplate.BeginUpdate(); IEditableObject editableObject = rowInfo1 != null ? rowInfo1.DataBoundItem as IEditableObject : (IEditableObject)null; if (rowInfo1 == null) { rowInfo1 = this.ViewTemplate.ListSource.AddNew(); editableObject = rowInfo1.DataBoundItem as IEditableObject; editableObject?.BeginEdit(); } else { this.boundRow.IsVisible = true; } rowInfo1.AddingNewDataRow = true; bool flag = false; for (int index = 0; index < this.ViewTemplate.Columns.Count; ++index) { GridViewColumn column = (GridViewColumn)this.ViewTemplate.Columns[index]; object obj = this[column]; if (obj == null) { GridViewCheckBoxColumn viewCheckBoxColumn = column as GridViewCheckBoxColumn; if (viewCheckBoxColumn != null && viewCheckBoxColumn.DataType.IsValueType) { object instance = Activator.CreateInstance(viewCheckBoxColumn.DataType); rowInfo1[column] = instance; } } else if (this.changedColumns.Contains((object)column)) { flag = true; rowInfo1[column] = obj; } } if (flag) { editableObject?.EndEdit(); this.ViewTemplate.EndUpdate(false); GridViewSynchronizationService.SuspendEvent(this.ViewTemplate, KnownEvents.CurrentChanged); ((ICancelAddNew)this.ViewTemplate.ListSource).EndNew(this.ViewTemplate.ListSource.Count - 1); GridViewSynchronizationService.ResumeEvent(this.ViewTemplate, KnownEvents.CurrentChanged); if (!this.deferUserAddedRow) { GridViewRowEventArgs args3 = new GridViewRowEventArgs(rowInfo1); this.ViewTemplate.EventDispatcher.RaiseEvent <GridViewRowEventArgs>(EventDispatcher.UserAddedRow, (object)this.ViewTemplate, args3); this.addedRow = (GridViewRowInfo)null; } else { this.addedRow = rowInfo1; } this.deferUserAddedRow = false; if (this.moveToLastRow) { rowInfo1.IsCurrent = true; this.moveToLastRow = false; } else { this.ViewTemplate.MasterTemplate.CurrentRow = (GridViewRowInfo)this.ViewInfo.TableAddNewRow; } } else { if (this.boundRow != null || this.ViewTemplate.ListSource.Count > count) { ((ICancelAddNew)this.ViewTemplate.ListSource).CancelNew(this.ViewTemplate.ListSource.Count - 1); } this.ViewTemplate.EndUpdate(false); } } catch (Exception ex) { if (this.boundRow != null || this.ViewTemplate.ListSource.Count > count) { ((ICancelAddNew)this.ViewTemplate.ListSource).CancelNew(this.ViewTemplate.ListSource.Count - 1); } this.ViewTemplate.EndUpdate(false); this.ViewTemplate.SetError(new GridViewCellCancelEventArgs((GridCellElement)null, (IInputEditor)null), ex); return((GridViewRowInfo)null); } finally { this.boundRow = (GridViewRowInfo)null; this.newRowInitialized = false; this.IsModified = false; this.ClearCache(); this.changedColumns.Clear(); this.InvalidateRow(); this.ViewTemplate.Rows.addingThroughUI = false; if (this.ViewTemplate != null && this.ViewTemplate.ListSource != null) { this.ViewTemplate.ListSource.CreateATransactionForEveryValueSetting = true; } if (rowInfo1 != null) { rowInfo1.AddingNewDataRow = false; } if (this.ViewInfo.ParentRow != null && this.ViewInfo.SummaryRows.Count > 0) { ++this.ViewInfo.summaryValueVersion; this.ViewTemplate.MasterTemplate.SynchronizationService.DispatchEvent(new GridViewEvent((object)this.ViewTemplate, (object)this, new object[1] { (object)new DataViewChangedEventArgs(ViewChangedAction.DataChanged, (IList)null) }, new GridViewEventInfo(KnownEvents.ViewChanged, GridEventType.Both, GridEventDispatchMode.Send))); } } return(rowInfo1); }