Aktuelle Zeile im DataGrid (nach Sort)

Hallo bei wewewa!

Ich habe eine Frage zum DataGrid.

Zur Ermittlung der aktuellen Zeile verwende ich folgendes:

private void processGrid_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
dp.X = e.X;
dp.Y = e.Y;
currentLine = processGrid.HitTest(dp).Row;
// mach was mit der Zeile
changeView(currentLine);
}

Das ist soweit auch ok, aber: Das DataGrid ermöglicht ja das Sortieren der Daten, was ja ganz nett ist. Aber: danach ist obige Routine falsch, da sie das Sortieren nicht mitkriegt.

Dazu zwei Fragen:

Welchen Event löst das Sortieren aus?
(und wodrin Grid, dataSet oder DataTable?)

Was muß man machen, um nach dem Sort die bisherige aktuelle Zeile neu zu bestimmen.
(ggfs. kann ich auch sagen, selktier doch neu)

Jede Idee kann helfen!

mfg

Dirk

Hallo

Lass den Currency Manager (hat nichts mit geld zu tun) dieses doofe problem für dich lösen :smile:

// bindingManager ist von typ CurrencyManager welches vom BindingManagerBase ableitet
private BindingManagerBase bindingManager;
 
//irgendwo im code z.b. im constructor
bindingManager = dgDocuments.BindingContext[this.dgDocuments.DataSource, this.dgDocuments.DataMember]; 
bindingManager.PositionChanged += new EventHandler(bindingManager\_PositionChanged);
 
private void bindingManager\_PositionChanged(object sender, EventArgs e)
{
 System.DataDataRow row = ((System.Data.DataRowView)bindingManager.Current).Row
}

alles unklar? frag nur falls etwas unklar sein sollte.

gruss

Hallo Giuseppe,

Das wars! Wenn man dann in den event auch reinpackt, das was passieren soll, klasse! (Hatte ich nämlich verpennt :wink:

mfg

Dirk

P.S. Punkt gibts auch, mehrstündiges Googeln hatte es nicht gebracht!

Aber bei mehreren selected?
Hallo Guiseppe,

das mit der einen Zeile klappt prima.

Aber:

Mehrere Zeilen im DataGrid markiert.

Wie kann ich die Daten dazu lesen, also sinngemäß:

foreach (gridline grdl in datagrid)
{
if (grdl .isSelected)
data = datatable.getitem(grdl.pointerToDataTable);
}

Kann das schlecht mal eben erklären, vieleicht gehts ja so …

Hallo

keine Ahnung :smile: Der Currency Manager unterstützt das leider nicht.
Ich hab das Gefühl, dass ich so einen Artikel bei http://www.syncfusion.com/FAQ/WinForms/ gelesen habe… die seite ist momentan aber nicht erreichtbar.

gruss

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Guiseppe,

hab da was gefunden:
Alle DataTables hab ich mit einem PrimaryKey (id) versehen.

protected ArrayList idList(dataGrid dg, DataTable dt, string idName)
{
ArrayList marked.Clear();
DataView dv = dt.DefaultView;
for(int i = 0; i