Autor Beitrag
Talemantros
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Sa 28.03.15 00:38 
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:

ausblenden volle Höhe 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4796
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: So 29.03.15 22:37 
Hallo Ralf,
hinter der, von dir erfragten, Methode unter a) verbirgt sich

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: So 29.03.15 23:14 
Dann etwa

ausblenden 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"];

    // mach irgendwas mit der id
}
Talemantros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: 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 user profile iconTh69: C#-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4796
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Di 31.03.15 11:37 
Super danke!
Sorry, dass ich vorherigen Post die c#-Tags vergessen hatte.

Gruß