Ich habe das folgende Business-Objekt:C# Datagridview Mitglied der Liste <DataTable> innerhalb Objekt gebunden
public class MyObject
{
// Some public properties that are bound to text boxes, etc on the form
public string Customer { get; set; }
public int JobNumber { get; set; }
// Each DataTable in this list consists of a single column of doubles
// representing the error in a series of measurements (ex. -.0002, -.0003, .0002, etc)
public List<DataTable> MeasurementErrors {get; set; }
public MyObject
{
// Code in here creates the first DataTable with the first measurement (always zero)
// and adds it to the MeasurementErrors list
errors = new DataTable();
errors.TableName = "MeasurementErrors";
errors.Columns.Add("Error", typeof(double));
errors.Rows.Add(0.0);
MeasurementErrors.Add(errors); // initial table added to the list
}
}
Ich habe keine Probleme bindenden Kunden und Jobnummer hatte und alle anderen grundlegenden Eigenschaften Boxen auf dem Anmeldeformular zum Text (VS hat eine BindingSource generiert und alle diese Steuerelemente für mich eingerichtet).
Woran ich Probleme habe, ist die Bindung eines DataTables in MeasurementErrors an ein DataGridView-Steuerelement. Die zu bindende Tabelle sollte von einem NumericUpDown-Steuerelement ausgewählt werden. Anschließend wird eine einfache Schaltfläche "Add" (Hinzufügen) zum Generieren einer neuen Tabelle und zum Hinzufügen zu MeasurementErrors (und ggf. einer Löschschaltfläche) verwendet. Wie richte ich die DataSource- und DataMember-Eigenschaften von DataGridView ein, um an MeasurementErrors [Wert von UpDownControl] zu binden?
Ich bin nicht auf die Verwendung von DataTables festgelegt, aber von dem, was ich gelesen habe, ist die bevorzugte Art der Bindung an ein DataGridView.
Ich habe meine Liste der DataTables mit IList implementiert und es scheint zu funktionieren, aber dies hat dem Projekt eine weitere Falte hinzugefügt. Davor hatte ich nur eine einzige DataTable. Ich benutzte einen XmlSerializer, um MyObject in einer Datei zu speichern. IList scheint nicht serialisierbar zu sein, daher wird es einfach aus der resultierenden XML-Datei weggelassen. Gibt es eine einfache Möglichkeit, diesen IList serialisierbar zu machen? – JJS
Re: EDIT # 1 - Danke, erstellen eine separate öffentliche Eigenschaft, die ich nicht beabsichtige, tatsächlich mit _MeasurementErrors typecasted zu einer Liste verwendet, um MyObject mit allen Daten zu serialisieren. Jetzt muss ich nur herausfinden, wie die IList-Eigenschaft an die DataGridView gebunden wird, während der Index angegeben wird. – JJS
Sie müssen nicht wirklich eine andere Eigenschaft erstellen, sondern nur Ihre 'MeasurementErrors' eingeben, wenn Sie sie serialisieren. Ich habe nicht viel mit 'Serialisierung' gearbeitet, vielleicht verpasse ich hier etwas. Aber ich bekomme nicht den Sinn, die 'IList' an die 'DataGridView' zu binden, während ein Index angegeben wird. Können Sie nicht einfach 'DataGridView.DataSource = IList'? –