I'm working with DataGridView in IPY2.6.1 and I'm having trouble with a couple of things. I found a closed issue on the CodePlex here:
http://www.codeplex.com/IronPython/WorkItem/View.aspx?WorkItemId=6332 and used it as a platform to experiment. I've attached the code to this post below. However, the changes I have made led me to a couple of issues: 1) If I set the DataSource of the DataGridView(DGV) to a BindingList containing instances of a custom class, then the DGV adds a column for both properties and instance variables. Obviously, the DGV doesn't discriminate, is there a way that I can make it add only properties? 2) The purpose of using the BindingList was to facilitate deletion, editing and adding new records to the DGV. Deletion and editing work fine, but trying to add a new record causes a run-time error "System.MissingMethodException: Constructor on type 'IronPython.NewTypes.System.Object_1$1' not found." Any ideas why this is? Is there a better way to bind a collection, list, etc to a DGV than using a BindingList, an idea I got from a C# book? import clr import System clr.AddReference('System.Windows.Forms') import System.Windows.Forms as SWF from System.ComponentModel import BindingList SAMPLE_DATA = [ ('Joe', 23), ('Bob', 8), ('Thomas', 32), ('Patrick', 41), ('Kathy', 19), ('Sue', 77), ] class Person(System.Object): def __init__(self): self._name = "" self._age = -1 def get_name(self): return self._name def set_name(self, value): self._name = value Name = property(get_name, set_name) def get_age(self): return self._age def set_age(self, value): self._age = value Age = property(get_age, set_age) class DBInterface: @staticmethod def GetPairs(): Pairs = BindingList[Person]() Pairs.AllowNew = True for name, age in SAMPLE_DATA: temp = Person() temp.Name = name temp.Age = age Pairs.Add(temp) return Pairs class Form(SWF.Form): def __init__(self): SWF.Form.__init__(self) grid = SWF.DataGridView() grid.AutoGenerateColumns = True grid.DataSource = DBInterface.GetPairs() grid.Dock = SWF.DockStyle.Fill self.Controls.Add(grid) SWF.Application.EnableVisualStyles() form = Form() SWF.Application.Run(form) Thanks, David _______________________________________________ Users mailing list [email protected] http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
