Entwickler-Ecke
WinForms - DataGridviewRow auslesen von einer Zelle über einen Button
Talemantros - Sa 28.03.15 00:38
Titel: DataGridviewRow auslesen von einer Zelle über einen Button
Hallo,
kaum behauptet ich kam gut zurecht schon habe ich en Problem :-)
Wenn ich eine Zelle eines DatagridView auslesen will über den Doppelklick des Datagridview geht dies mit "DataGridViewRowEventArgs e" gut.
Leider bekomme ich dies nicht anders hin würde aber gern einen Button dem Benutzer zur Verfügung stellen.
Ich hatte sowas ähnliches schon mal, leider finde ich den Eintrag nicht mehr und weiß nicht mehr ob und wie es gelöst war.
Hier der Code des UserControls:
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:
| public partial class MaschineWarteUserControl : UserControl { long employee = 0;
public MaschineWarteUserControl(long uebergabe) { InitializeComponent(); employee = uebergabe; }
private void MaschineWarteUserControl_Load(object sender, EventArgs e) { cmbMaschine.DataSource = MachineMethods.GetDataTableMachine(); cmbMaschine.ValueMember = "maschgrundid"; cmbMaschine.DisplayMember = "bezeichnung"; cmbMaschine.SelectedIndex = -1; }
private void cmbMaschine_SelectionChangeCommitted(object sender, EventArgs e) { bsWarte.DataSource = MachineMethods.GetDataTableOktabinerFromWarte(Convert.ToInt64(cmbMaschine.SelectedValue)); dgvWarteschlange.DataSource = bsWarte;
dgvWarteschlange.Columns[0].Visible = false; dgvWarteschlange.Columns[1].HeaderText = "Oktabiner"; }
private void btnLoeschen_Click(object sender, DataGridViewRowEventArgs ex, EventArgs e) { long ID = (long)(dgvWarteschlange.SelectedRows[ex.Row].Cells[0]).Value; } } |
Könntet ihr mir helfen?
Ich hatte die BindingSource dazwischen gehangen, weil ich dachte ich könnte über bsWarte.Current weiter zu kommen.
Gruß
Daniel
Th69 - Sa 28.03.15 11:00
Hallo,
du solltest doch inzwischen wissen, daß man die Signatur von Ereignismethoden nicht ändern kann (also der zusätzliche Parameter DataGridViewRowEventArgs beim Button-Click nicht geht).
Greife im Code des Click-Ereignisses direkt auf die Eigenschaften des DGV (bzw. der BindingSource) zu.
Talemantros - So 29.03.15 15:42
Hallo TH69,
ich hatte schon etliche Versuche gestartet, bevor ich die Signatur verändert habe.
Leider irgendwie ohne Erfog.
Es hängt wieder mal an einer Kleinigkeit und ich bekomme es einfach nicht hin beim BIndingSource.Current oder ähnlichem den Wert in der Column 0 auszulesen.
Gruß
Daniel
Ralf Jansen - So 29.03.15 16:23
Zitat: |
Es hängt wieder mal an einer Kleinigkeit und ich bekomme es einfach nicht hin beim BIndingSource.Current oder ähnlichem den Wert in der Column 0 auszulesen. |
Warum willst du noch zusätzlich rausfinden was Column 0 ist? Mit BindingSource.Current hast du das passende Object wieso liest du nicht einfach die passende Property dieses Objects aus die dich im aktuellen Context interessiert. Die wievielte Column das ist sollte doch eher egal?
Talemantros - So 29.03.15 21:24
Hi,
Da komme ich mal wieder leider nicht mit.
Wenn ich gewusst hätte wie es geht hätte ich ja nicht gefragt :-(
Gruß
Daniel
Das DataTable ist untypisiert.
Ralf Jansen - So 29.03.15 21:28
a.) Was für einen Typ liefert dir denn die MachineMethods.GetDataTableOktabinerFromWarte Methode?
b.) Welche Property des Datentyps (nicht der Listentyp sondern der Typ in der Liste) die diese Methode liefert interessiert dich?
Talemantros - So 29.03.15 22:37
Hallo Ralf,
hinter der, von dir erfragten, Methode unter a) verbirgt sich
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| public static DataTable GetDataTableOktabinerFromWarte(long machine) { strSql = "Select maschwarteid, oktnummer from maschwarte " + "join oktabinergrund on oktabinergrund.oktabinergrundid=maschwarte.oktabinergrundid " + "where maschwarte.maschgrundid = ?maschgrundid";
DataTable dt = new DataTable();
using (MySqlConnection conn = new MySqlConnection(connStr)) { using (MySqlDataAdapter da = new MySqlDataAdapter(strSql, conn)) { da.SelectCommand.Parameters.AddWithValue("?maschgrundid", machine); da.Fill(dt); } }
return dt; } |
Um ehrlich zu sein verstehe ich die Fragestellung zu B) nicht richtig
In der oben genannten Methode wird ausgelesen
maschwarteid (Long)
oktnummer (string)
Beim Klick auf den Button möchte ich gern den Wert von maschwarteid haben, damit ich diesen über eine neue Methode zur Datenbank schicken kann und diese Zeile löschen kann anhand der ID.
Hilft dir dies?
Gruß
Ralf Jansen - So 29.03.15 23:14
Dann etwa
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| private void btnLoeschen_Click(object sender, EventArgs e) { DataRow row = ((DataRowView)bsWarte.Current).Row; long id = (long)row["maschwarteid"];
} |
Talemantros - Di 31.03.15 10:11
Hallo Ralf,
vielen dank dafür.
Das funktioniert soweit ganz gut.
Ein kleines Problem habe ich noch.
Wenn jemand die Combobox auswählt, wird das Datagridview gefüllt.
Wenn ich dann den Button drücke erkennt er den ersten Datensatz als Current, obwohl der Benutzer im DataGridview noch nichts angewählt hat.
bswarte.current = null kann ich nicht zuweisen.
bswarte.position = -1 funktioniert auch nicht
Wie könnte ich dies lösen?
Danke
VG
Moderiert von
Th69: C#-Tags hinzugefügt
Th69 - Di 31.03.15 10:30
Eine BindingSource kennt kein "nicht-selektiert", d.h. Position und Current zeigen immer auf Element der zugewiesen Liste (außer diese ist selbst null).
Standardmäßig sollte doch auch bei einer DataGridView immer die erste Zeile selektiert sein, dann würde das doch passen.
Ansonsten kannst du ja eine boolsche Variable dafür verwenden und nach der manuellen Erstselektion entsprechend setzen.
Talemantros - Di 31.03.15 11:37
Super danke!
Sorry, dass ich vorherigen Post die c#-Tags vergessen hatte.
Gruß
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!