using System.ComponentModel;
using System.Collections;
+using System.ComponentModel.Design.Serialization;
namespace System.Windows.Forms {
+ [DesignerSerializerAttribute ("System.Windows.Forms.Design.DataGridViewRowCollectionCodeDomSerializer, " + Consts.AssemblySystem_Design,
+ "System.ComponentModel.Design.Serialization.CodeDomSerializer, " + Consts.AssemblySystem_Design)]
+ [ListBindable (false)]
public class DataGridViewRowCollection : IList, ICollection, IEnumerable {
private ArrayList list;
private bool raiseEvent = true;
- public DataGridViewRowCollection (DataGridView dataGridView) {
- if (dataGridView == null) {
- throw new ArgumentException("DataGridView is null.");
- }
+ public DataGridViewRowCollection (DataGridView dataGridView)
+ {
this.dataGridView = dataGridView;
- list = new ArrayList();
+ list = new ArrayList ();
}
public int Count {
get { return list.Count; }
}
- public bool IsFixedSize {
+ int ICollection.Count
+ {
+ get { return Count; }
+ }
+
+ bool IList.IsFixedSize {
get { return list.IsFixedSize; }
}
- public bool IsReadOnly {
+ bool IList.IsReadOnly {
get { return list.IsReadOnly; }
}
- public bool IsSynchronized {
+ bool ICollection.IsSynchronized {
get { return list.IsSynchronized; }
}
object IList.this [int index] {
get {
- Console.WriteLine("acceso");
return this[index];
}
set { list[index] = value as DataGridViewRow; }
public DataGridViewRow this [int index] {
get {
- // Accessing a System.Windows.Forms.DataGridViewRow with this indexer causes the row to become unshared. To keep the row shared, use the System.Windows.Forms.DataGridViewRowCollection.SharedRow method. For more information, see Best Practices for Scaling the Windows Forms DataGridView Control.
- return (DataGridViewRow) list[index];
+ // Accessing a System.Windows.Forms.DataGridViewRow with this indexer causes the row to become unshared.
+ // To keep the row shared, use the System.Windows.Forms.DataGridViewRowCollection.SharedRow method.
+ // For more information, see Best Practices for Scaling the Windows Forms DataGridView Control.
+ DataGridViewRow row = (DataGridViewRow) list [index];
+ if (row.Index == -1) {
+ row = (DataGridViewRow) row.Clone ();
+ row.SetIndex (index);
+ list [index] = row;
+ }
+ return row;
}
}
- public object SyncRoot {
+ object ICollection.SyncRoot {
get { return list.SyncRoot; }
}
- public event CollectionChangeEventHandler CollectionChange;
+ public event CollectionChangeEventHandler CollectionChanged;
- public virtual int Add () {
+ [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
+ public virtual int Add ()
+ {
return Add(dataGridView.RowTemplate.Clone() as DataGridViewRow);
}
- int IList.Add(object o) {
+ int IList.Add(object o)
+ {
return Add(o as DataGridViewRow);
}
- public virtual int Add (DataGridViewRow dataGridViewRow) {
+ internal int AddInternal (DataGridViewRow dataGridViewRow, bool sharable)
+ {
if (dataGridView.DataSource != null) {
- throw new InvalidOperationException("DataSource of DataGridView is not null.");
+ throw new InvalidOperationException ("DataSource of DataGridView is not null.");
}
if (dataGridView.Columns.Count == 0) {
- throw new InvalidOperationException("DataGridView has no columns.");
+ throw new InvalidOperationException ("DataGridView has no columns.");
}
- dataGridViewRow.SetIndex(list.Count);
- dataGridViewRow.SetDataGridView(dataGridView);
- int result = list.Add(dataGridViewRow);
- OnCollectionChange(new CollectionChangeEventArgs(CollectionChangeAction.Add, dataGridViewRow));
+ int result = list.Add (dataGridViewRow);
+ if (sharable && CanBeShared (dataGridViewRow)) {
+ dataGridViewRow.SetIndex (-1);
+ } else {
+ dataGridViewRow.SetIndex (list.Count - 1);
+ }
+ dataGridViewRow.SetDataGridView (dataGridView);
+
+ for (int i = 0; i < dataGridViewRow.Cells.Count; i++) {
+ dataGridViewRow.Cells [i].SetOwningColumn (dataGridView.Columns [i]);
+ }
+
+ OnCollectionChanged (new CollectionChangeEventArgs (CollectionChangeAction.Add, dataGridViewRow));
if (raiseEvent) {
- DataGridView.OnRowsAdded(new DataGridViewRowsAddedEventArgs(result, 1));
+ DataGridView.OnRowsAddedInternal (new DataGridViewRowsAddedEventArgs (result, 1));
}
return result;
}
- public virtual int Add (int count) {
+ public virtual int Add (DataGridViewRow dataGridViewRow)
+ {
+ return AddInternal (dataGridViewRow, true);
+ }
+
+ private bool CanBeShared (DataGridViewRow row)
+ {
+ foreach (DataGridViewCell cell in row.Cells) {
+ if (cell.Value != null)
+ return false;
+
+ if (cell.ToolTipText != string.Empty)
+ return false;
+
+ if (cell.ContextMenuStrip != null)
+ return false;
+ }
+
+ return true;
+ }
+
+
+ [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
+ public virtual int Add (int count)
+ {
if (count <= 0) {
throw new ArgumentOutOfRangeException("Count is less than or equeal to 0.");
}
return result;
}
- public virtual int Add (params object[] values) {
+ [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
+ public virtual int Add (params object[] values)
+ {
if (values == null) {
throw new ArgumentNullException("values is null.");
}
if (dataGridView.VirtualMode) {
throw new InvalidOperationException("DataGridView is in virtual mode.");
}
- DataGridViewRow row = new DataGridViewRow();
- int result = Add(row);
+ DataGridViewRow row = (DataGridViewRow)dataGridView.RowTemplateFull;
+
+ int result = AddInternal (row, false);
row.SetValues(values);
return result;
}
- public virtual int AddCopies (int indexSource, int count) {
+ public virtual int AddCopies (int indexSource, int count)
+ {
raiseEvent = false;
int lastIndex = 0;
for (int i = 0; i < count; i++) {
return lastIndex;
}
- public virtual int AddCopy (int indexSource) {
+ public virtual int AddCopy (int indexSource)
+ {
return Add((list[indexSource] as DataGridViewRow).Clone() as DataGridViewRow);
}
- public virtual void AddRange (params DataGridViewRow[] dataGridViewRows) {
+ [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
+ public virtual void AddRange (params DataGridViewRow[] dataGridViewRows)
+ {
raiseEvent = false;
int count = 0;
int lastIndex = -1;
raiseEvent = true;
}
- public virtual void Clear () {
+ public virtual void Clear ()
+ {
list.Clear();
}
- bool IList.Contains (object o) {
+ bool IList.Contains (object o)
+ {
return Contains(o as DataGridViewRow);
}
- public virtual bool Contains (DataGridViewRow dataGridViewRow) {
+ public virtual bool Contains (DataGridViewRow dataGridViewRow)
+ {
return list.Contains(dataGridViewRow);
}
- public void CopyTo (Array array, int index) {
+ void ICollection.CopyTo (Array array, int index)
+ {
list.CopyTo(array, index);
}
- public void CopyTo (DataGridViewRow[] array, int index) {
+ public void CopyTo (DataGridViewRow[] array, int index)
+ {
list.CopyTo(array, index);
}
- public IEnumerator GetEnumerator () {
+ IEnumerator IEnumerable.GetEnumerator ()
+ {
return list.GetEnumerator();
}
- public int GetFirstRow (DataGridViewElementStates includeFilter) {
+ public int GetFirstRow (DataGridViewElementStates includeFilter)
+ {
for (int i = 0; i < list.Count; i++) {
DataGridViewRow row = (DataGridViewRow) list[i];
if ((row.State & includeFilter) != 0) {
return -1;
}
- public int GetFirstRow (DataGridViewElementStates includeFilter, DataGridViewElementStates excludeFilter) {
+ public int GetFirstRow (DataGridViewElementStates includeFilter, DataGridViewElementStates excludeFilter)
+ {
for (int i = 0; i < list.Count; i++) {
DataGridViewRow row = (DataGridViewRow) list[i];
if (((row.State & includeFilter) != 0) && ((row.State & excludeFilter) == 0)) {
return -1;
}
- public int GetLastRow (DataGridViewElementStates includeFilter) {
+ public int GetLastRow (DataGridViewElementStates includeFilter)
+ {
for (int i = list.Count - 1; i >= 0; i--) {
DataGridViewRow row = (DataGridViewRow) list[i];
if ((row.State & includeFilter) != 0) {
return -1;
}
- public int GetNextRow (int indexStart, DataGridViewElementStates includeFilter) {
+ public int GetNextRow (int indexStart, DataGridViewElementStates includeFilter)
+ {
for (int i = indexStart + 1; i < list.Count; i++) {
DataGridViewRow row = (DataGridViewRow) list[i];
if ((row.State & includeFilter) != 0) {
return -1;
}
- public int GetNextRow (int indexStart, DataGridViewElementStates includeFilter, DataGridViewElementStates excludeFilter) {
+ public int GetNextRow (int indexStart, DataGridViewElementStates includeFilter, DataGridViewElementStates excludeFilter)
+ {
for (int i = indexStart + 1; i < list.Count; i++) {
DataGridViewRow row = (DataGridViewRow) list[i];
if (((row.State & includeFilter) != 0) && ((row.State & excludeFilter) == 0)) {
return -1;
}
- public int GetPreviousRow (int indexStart, DataGridViewElementStates includeFilter) {
+ public int GetPreviousRow (int indexStart, DataGridViewElementStates includeFilter)
+ {
for (int i = indexStart - 1; i >= 0; i--) {
DataGridViewRow row = (DataGridViewRow) list[i];
if ((row.State & includeFilter) != 0) {
return -1;
}
- public int GetPreviousRow (int indexStart, DataGridViewElementStates includeFilter, DataGridViewElementStates excludeFilter) {
+ public int GetPreviousRow (int indexStart, DataGridViewElementStates includeFilter, DataGridViewElementStates excludeFilter)
+ {
for (int i = indexStart - 1; i >= 0; i--) {
DataGridViewRow row = (DataGridViewRow) list[i];
if (((row.State & includeFilter) != 0) && ((row.State & excludeFilter) == 0)) {
return -1;
}
- public int GetRowCount (DataGridViewElementStates includeFilter) {
+ public int GetRowCount (DataGridViewElementStates includeFilter)
+ {
int result = 0;
foreach (DataGridViewRow row in list) {
if ((row.State & includeFilter) != 0) {
return result;
}
- public int GetRowsHeight (DataGridViewElementStates includeFilter) {
+ public int GetRowsHeight (DataGridViewElementStates includeFilter)
+ {
int result = 0;
foreach (DataGridViewRow row in list) {
if ((row.State & includeFilter) != 0) {
return result;
}
- public virtual DataGridViewElementStates GetRowState (int rowIndex) {
+ public virtual DataGridViewElementStates GetRowState (int rowIndex)
+ {
return (list[rowIndex] as DataGridViewRow).State;
}
- int IList.IndexOf (object o) {
+ int IList.IndexOf (object o)
+ {
return IndexOf(o as DataGridViewRow);
}
- public int IndexOf (DataGridViewRow dataGridViewRow) {
+ public int IndexOf (DataGridViewRow dataGridViewRow)
+ {
return list.IndexOf(dataGridViewRow);
}
- void IList.Insert (int rowIndex, object o) {
+ void IList.Insert (int rowIndex, object o)
+ {
Insert(rowIndex, o as DataGridViewRow);
}
- public virtual void Insert (int rowIndex, DataGridViewRow dataGridViewRow) {
+ public virtual void Insert (int rowIndex, DataGridViewRow dataGridViewRow)
+ {
dataGridViewRow.SetIndex(rowIndex);
dataGridViewRow.SetDataGridView(dataGridView);
list[rowIndex] = dataGridViewRow;
- OnCollectionChange(new CollectionChangeEventArgs(CollectionChangeAction.Add, dataGridViewRow));
+ OnCollectionChanged(new CollectionChangeEventArgs(CollectionChangeAction.Add, dataGridViewRow));
if (raiseEvent) {
DataGridView.OnRowsAdded(new DataGridViewRowsAddedEventArgs(rowIndex, 1));
}
}
- public virtual void Insert (int rowIndex, int count) {
+ public virtual void Insert (int rowIndex, int count)
+ {
int index = rowIndex;
raiseEvent = false;
for (int i = 0; i < count; i++) {
raiseEvent = true;
}
- public virtual void Insert (int rowIndex, params object[] values) {
+ public virtual void Insert (int rowIndex, params object[] values)
+ {
if (values == null) {
throw new ArgumentNullException("Values is null.");
}
Insert(rowIndex, row);
}
- public virtual void InsertCopies (int indexSource, int indexDestination, int count) {
+ public virtual void InsertCopies (int indexSource, int indexDestination, int count)
+ {
raiseEvent = false;
int index = indexDestination;
for (int i = 0; i < count; i++) {
raiseEvent = true;
}
- public virtual void InsertCopy (int indexSource, int indexDestination) {
+ public virtual void InsertCopy (int indexSource, int indexDestination)
+ {
Insert(indexDestination, (list[indexSource] as DataGridViewRow).Clone());
}
- public virtual void InsertRange (int rowIndex, params DataGridViewRow[] dataGridViewRows) {
+ public virtual void InsertRange (int rowIndex, params DataGridViewRow[] dataGridViewRows)
+ {
raiseEvent = false;
int index = rowIndex;
int count = 0;
raiseEvent = true;
}
- void IList.Remove (object o) {
+ void IList.Remove (object o)
+ {
Remove(o as DataGridViewRow);
}
- public virtual void Remove (DataGridViewRow dataGridViewRow) {
+ public virtual void Remove (DataGridViewRow dataGridViewRow)
+ {
list.Remove(dataGridViewRow);
- OnCollectionChange(new CollectionChangeEventArgs(CollectionChangeAction.Remove, dataGridViewRow));
+ OnCollectionChanged(new CollectionChangeEventArgs(CollectionChangeAction.Remove, dataGridViewRow));
DataGridView.OnRowsRemoved(new DataGridViewRowsRemovedEventArgs(dataGridViewRow.Index, 1));
}
- public virtual void RemoveAt (int index) {
+ public virtual void RemoveAt (int index)
+ {
DataGridViewRow row = this[index];
list.RemoveAt(index);
- OnCollectionChange(new CollectionChangeEventArgs(CollectionChangeAction.Remove, row));
+ OnCollectionChanged(new CollectionChangeEventArgs(CollectionChangeAction.Remove, row));
DataGridView.OnRowsRemoved(new DataGridViewRowsRemovedEventArgs(index, 1));
}
- public DataGridViewRow SharedRow (int rowIndex) {
+ public DataGridViewRow SharedRow (int rowIndex)
+ {
return (DataGridViewRow) list[rowIndex];
}
+ internal int SharedRowIndexOf (DataGridViewRow row)
+ {
+ return list.IndexOf (row);
+ }
+
protected DataGridView DataGridView {
get { return dataGridView; }
}
get { return list; }
}
- protected virtual void OnCollectionChange (CollectionChangeEventArgs e) {
- if (CollectionChange != null) {
- CollectionChange(this, e);
+ protected virtual void OnCollectionChanged (CollectionChangeEventArgs e)
+ {
+ if (CollectionChanged != null) {
+ CollectionChanged (this, e);
}
}
/************************/
- internal void InternalAdd (DataGridViewRow dataGridViewRow) {
+ internal void InternalAdd (DataGridViewRow dataGridViewRow)
+ {
dataGridViewRow.SetIndex(list.Count);
dataGridViewRow.SetDataGridView(dataGridView);
list.Add(dataGridViewRow);