public static object AddNewDataItem( IEnumerable itemsSourceCollection, DataGridControl dataGridControl, out int itemIndex ) { DataGridCollectionViewBase dataGridCollectionViewBase = itemsSourceCollection as DataGridCollectionViewBase; if( dataGridCollectionViewBase != null ) { if( !dataGridCollectionViewBase.CanAddNew ) throw new InvalidOperationException( "An attempt was made to add a new data item to a source that does not support insertion." ); itemIndex = dataGridCollectionViewBase.Count; return dataGridCollectionViewBase.AddNew(); } if( ( dataGridControl != null ) && ( dataGridControl.ItemsSource == null ) ) { //unbound #pragma warning disable 618 AddingNewDataItemEventArgs eventArgs = new AddingNewDataItemEventArgs(); dataGridControl.OnAddingNewDataItem( eventArgs ); object newItem = eventArgs.DataItem; #pragma warning restore 618 if( newItem == null ) throw new InvalidOperationException( "The AddingNewDataItem event did not return a new data item because the grid is not bound to a data source." ); itemIndex = dataGridControl.Items.Add( newItem ); return newItem; } DataView dataView = itemsSourceCollection as DataView; if( dataView == null ) { CollectionView collectionView = itemsSourceCollection as CollectionView; dataView = ( collectionView == null ) ? null : collectionView.SourceCollection as DataView; } if( dataView != null ) { itemIndex = dataView.Count; return dataView.AddNew(); } IBindingList bindingList = itemsSourceCollection as IBindingList; if( bindingList == null ) { CollectionView collectionView = itemsSourceCollection as CollectionView; bindingList = ( collectionView == null ) ? null : collectionView.SourceCollection as IBindingList; } if( ( bindingList != null ) && ( bindingList.AllowNew ) ) { itemIndex = bindingList.Count; return bindingList.AddNew(); } Type itemType = ItemsSourceHelper.GetItemTypeFromEnumeration( itemsSourceCollection ); if( itemType == null ) throw new InvalidOperationException( "An attempt was made to use a source whose item type cannot be determined." ); try { itemIndex = -1; return Activator.CreateInstance( itemType ); } catch( MissingMethodException exception ) { throw new InvalidOperationException( "An attempt was made to use a source whose item type does not have a default constructor.", exception ); } catch( Exception exception ) { throw new InvalidOperationException( "An unsuccessful attempt was made to create an instance of the source's item type using the item's default constructor.", exception ); } }
protected internal virtual void OnAddingNewDataItem( AddingNewDataItemEventArgs e ) { if( this.AddingNewDataItem != null ) this.AddingNewDataItem( this, e ); }