Announcement

Collapse
No announcement yet.

CurrencyManager und DataView

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • CurrencyManager und DataView

    Hallo,

    ich habe Daten in ein DataGrid geschrieben,
    eine Zeile markiert und anschließend das DataGrid das Klick auf den Spaltenkopf neu sortiert.

    Die Zeile bleibt markiert - nur hat sich nun der Inhalt der Zeile geändert. Wie erreiche ich nun das Zeile markiert wird, die den zuvor markierten Inhalt entspricht?

    Ich weiß, dass ich den CurrencyManager mit Bindung an mein DataGrid verwenden muß, und dass (sortierte) DataGrids mit DataViews arbeiten - nur wie erhalte ich vom CurrencyManager den aktuellen DataView?

    (Ich seh' den Wald vor lauter C# Beispielen nicht mehr..)

    Viele Grüße
    Olaf

    und Zeile markiert und dann

    ich möchte auch nachdem d

  • #2
    Hallo,

    aufgrund der beiden Konferenzwochen ist die Antwort etwas verspätet, aber das Problem kann folgendermaßen gelöst werden:

    Das DataGrid wird nicht direkt an das DataSet gehängt, sondern an eine zwischengeschaltete <b>DataView</b>-Komponente:
    <pre>
    <font color="#003399"><i>// </i></font>
    <font color="#003399"><i>// DataGrid1</i></font>
    <font color="#003399"><i>// </i></font>
    Self.DataGrid1.DataMember := <font color="#9933CC">''</font>;
    Self.DataGrid1.DataSource := Self.DataView1;
    Self.DataGrid1.HeaderForeColor := System.Drawing.SystemColors.ControlText;
    Self.DataGrid1.Location := System.Drawing.Point.Create(8, 8);
    Self.DataGrid1.Name := <font color="#9933CC">'DataGrid1'</font>;
    Self.DataGrid1.Size := System.Drawing.Size.Create(576, 256);
    Self.DataGrid1.TabIndex := 0;
    Include(Self.DataGrid1.Click, Self.DataGrid1_Click);
    <font color="#003399"><i>// </i></font>
    <font color="#003399"><i>// DataView1</i></font>
    <font color="#003399"><i>// </i></font>
    Self.DataView1.Table := Self.DataSet11.Customers;
    </pre>
    Immer dann, wenn ein Spaltenheader im DataGrid angeklickt wird, merkt sich das Programm die aktuelle Position (<b>CurrentRowIndex</b>) in einem privaten Objektfeld (FPK), um danach diese Position mit der DataGrid-Anzeige über die Eigenschaft <b>CurrentCell</b> abzugleichen:
    <pre>
    <b>constructor</b> TWinForm.Create;
    <b>begin</b>
    <b>inherited</b> Create;
    <font color="#003399"><i>//</i></font>
    <font color="#003399"><i>// Erforderlich für die Unterstützung des Windows Forms-Designers</i></font>
    <font color="#003399"><i>//</i></font>
    InitializeComponent;
    <font color="#003399"><i>//</i></font>
    <font color="#003399"><i>// TODO: Fügen Sie nach dem Aufruf von InitializeComponent Konstruktorcode hinzu.</i></font>
    <font color="#003399"><i>//</i></font>
    DataView1.Sort := <font color="#9933CC">'CustomerID'</font>;
    <b>end</b>;
    <br>
    <b>procedure</b> TWinForm.DataGrid1_Click(sender: System.<b>Object</b>; e: System.EventArgs);
    <b>begin</b>
    FPos := DataGrid1.CurrentRowIndex;
    <b>end</b>;
    <br>
    <b>procedure</b> TWinForm.Button2_Click(sender: System.<b>Object</b>; e: System.EventArgs);
    <b>begin</b>
    DataView1.Sort := <font color="#9933CC">'CustomerID'</font>;
    dataGrid1.CurrentCell := DataGridCell.Create(FPos, 0);
    <b>end</b>;
    </pre&gt

    Comment

    Working...
    X