https://bugzilla.novell.com/show_bug.cgi?id=337470#c1
--- Comment #1 from Dimitar Dobrev <[EMAIL PROTECTED]> 2007-11-03 09:23:49 MST --- Created an attachment (id=181925) --> (https://bugzilla.novell.com/attachment.cgi?id=181925) Contains a test case for the proposed patch I am sorry the test case doesn't work but the reason is this: to test the patch I needed to use the changed DataGridView and I had no intention to recomplie the whole Mono. That's why I sopied the changed DataGridView and put it in a namespace called "Test" and then tried Test.DataGridView dgv = new Test.DataGridView (to use the changed DataGridView because). I got an error that the complier cannot find the namespace Test, I guess it's a compiler bug. Anyway, I suggest the following solution - the method DataGridView.BindIList should be changed from: private void BindIList (IList list) { if (list is DataView) { DataView dataView = (DataView) list; DataTable table = dataView.Table; DataGridViewCell template = new DataGridViewTextBoxCell(); foreach (DataColumn dataColumn in table.Columns) { DataGridViewColumn col = new DataGridViewColumn(template); col.Name = dataColumn.ColumnName; col.ValueType = dataColumn.DataType; columns.Add(col); } dataView.ListChanged += OnListChanged; } else if (list.Count > 0) { DataGridViewCell template = new DataGridViewTextBoxCell(); foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(list[0])) { DataGridViewColumn col = new DataGridViewColumn(template); col.Name = property.DisplayName; columns.Add(col); } } foreach (object element in list) { DataGridViewRow row = new DataGridViewRow(); rows.InternalAdd(row); PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(element); foreach (PropertyDescriptor property in properties) { DataGridViewTextBoxCell cell = new DataGridViewTextBoxCell(); cell.Value = property.GetValue(element); cell.ValueType = property.PropertyType; row.Cells.Add(cell); } } } to: private void BindIList (IList list) { if (list is DataView) { DataView dataView = (DataView) list; DataTable table = dataView.Table; DataGridViewCell template = new DataGridViewTextBoxCell(); foreach (DataColumn dataColumn in table.Columns) { DataGridViewColumn col = new DataGridViewColumn(template); col.Name = dataColumn.ColumnName; col.ValueType = dataColumn.DataType; columns.Add(col); } dataView.ListChanged += OnListChanged; } else if (list.Count > 0) { DataGridViewCell template = new DataGridViewTextBoxCell(); foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(list[0])) { DataGridViewColumn col = new DataGridViewColumn(template); col.Name = property.DisplayName; columns.Add(col); } } foreach (object element in list) { DataGridViewRow row = new DataGridViewRow(); rows.InternalAdd(row); PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(element); foreach (PropertyDescriptor property in properties) { Type cellType = property.PropertyType; MessageBox.Show("Checking type."); bool is_cell_type_IConvertible = false; foreach (Type type in cellType.GetInterfaces()){ if (type == System.IConvertible){ is_cell_type_IConvertible = true; break; } } if (!is_cell_type_IConvertible){ continue; } DataGridViewTextBoxCell cell = new DataGridViewTextBoxCell(); cell.Value = property.GetValue(element); cell.ValueType = cellType; row.Cells.Add(cell); } } } The type of each property is checked if it is IConvertible and if not, no column is created. That is the behaviour of MS's grid. -- Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the QA contact for the bug. You are the assignee for the bug. _______________________________________________ mono-bugs maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-bugs
