Entwickler-Ecke

WinForms - BindingList umformen


Coja - Fr 22.10.10 19:31
Titel: BindingList umformen
Hallo,
ich würde gerne die Werte einer BindingList (PointF) als Wert mit Metern angezeigt bekommen.
Das Problem sieht wiefolgt aus:
Ich habe eine 2-spaltige Liste, welche die x- und y-Koordinaten von Punkten anzeigt (diese Werte können sich ändern, also es können neue Werte hinzukommen, gelöscht werden, ...). Die Anzeige und das Änderen erfolgt in einer Datagridview. Zurzeit werden mir noch die aktuellen Zahlen als Float Pixel-Werte von Punkten angezeigt. Ich möchte aber das die Anzeige in Metern erfolgt, wobei 10 Pixel genau einem Meter entsprechen sollen. Die Änderungsfunktionen sollen weiterhin funkionieren nur die Anzeige soll verändert werden.

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
  BindingList<NeuPoint> PunkteListe;               
        int PanelHoehe;     // Höhe des Panels
        int HorScroll;      // Position der horizontalen Bildlaufleiste
        int VerScroll;      // Position der vertikalen Bildlaufleiste
        int VerPixZuMeter;  // Verhältnis von Pixel/Meter
        
        public Form1()
        {
            InitializeComponent();
            PunkteListe = new BindingList<NeuPoint>(); // Init. für Liste
      
            dataGridView1.DataSource = PunkteListe;
            
        }
//...
  public class NeuPoint // Anstelle von Point verwenden
        {
            public int NeuX { get; set; }
            public int NeuY { get; set; }
            // Klasse NeuPoint liefert 2 Integerwerte und kein Struct wie Point
            public NeuPoint(int x, int y)
            {
                NeuX = x;
                NeuY = y;
            }
            public static explicit operator PointF(NeuPoint Neuobj)
            {
                return new PointF(Neuobj.NeuX, Neuobj.NeuY);

            }
        }
//...
  private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            NeuPoint NP1= new NeuPoint(e.ColumnIndex, e.RowIndex);
            textBox2.Text = "Spalte: " +NP1.NeuX.ToString()+"  Zeile: "+NP1.NeuY.ToString();
            panel1.Invalidate();
        }

Um es kurz zu sagen: aus einer zweispaltigen Datagridview sol aus den Werten (x=)235 (y=)343 die Werte (x=)23,5m und (y=)3,43m werden.
Ich freu mich auf eure Antworten,
vg
Coja


Ralf Jansen - Fr 22.10.10 19:37

Verpasse deiner NeuPoint Klasse zwei weitere Properties entsprechend NeuX/NeuY die den errechneten Meter Wert ausgeben und zeige diese im DataGridView an anstatt die bisherigen 2 Properties NeuX/NeuY.


Coja - Fr 22.10.10 20:14

Hmm, das hört sich einfach an, aber wie mach ich das, damit das 'm' auch noch in der datagridview steht, das sollte ja dann eine String-Wert sein...
vg
Coja


Kenpachi - Fr 22.10.10 21:02

user profile iconCoja hat folgendes geschrieben Zum zitierten Posting springen:
aber wie mach ich das, damit das 'm' auch noch in der datagridview steht, das sollte ja dann eine String-Wert sein...
Als Typ des Properties musst du string nehmen, das hast du ja selbst schon festgestellt. Und um das 'm' auch mit dabei zu haben musst du im get'er einfach NeuX.ToString() + "m" bzw. NeuY.ToString() + "m" zurück geben. (Sofern NeuX und NeuY die Werte in Meter sind.)


~Kenpachi


Ralf Jansen - Fr 22.10.10 21:18

Wenn du im Grid auch editieren willst sollten die Properties Zahlentypen bleiben in deinem Fall wohl am ehesten Double.
Das 'm' bekommst du über ein Custom Format an die Column. Das Format findest du in den Properties des Grid. Dort einfach mal den Editor für Columns öffnen und dort wiederum den Editor für den CellStyle.


Coja - Sa 23.10.10 18:15

Hallo,
so ich hab das "m" mal hinzugefügt und dann die Werte der Liste durch 10 dividiert...und beim Zeichnen wiederum mit 10 multipliziert. Leider funktionieren jetzt die Funktionen der Binding-List nicht mehr, also Löschen und Editieren...
vg
Coja


Coja - Fr 29.10.10 14:32

Hallo,
leider habe ich das Problem noch nicht behoben. Ich hab mal ein Bild beigefügt. In der Datagridview befinden sich die Werte noch in Pixeln (also wie sie gezeichnet werden). Ich möchte aber die Werte in Meter angezeigt bekommen, also das ganze durch 10 dividiert. Dabei sollen Veränderungen noch möglich sein (also editieren, löschen,...). Hat jemand da einen Tipp für mich (der Code steht oben)
vg
Coja