Controlbox-Status aus Datagrid auslesen

tg6300

Grünschnabel
Hallo Experten,

leider war die Suche im Forum ohne Erfolg, deshalb mein Post.

Ich lade in einem Programm ein DataGrid aus einer Access-DB. Darin ist eine Spalte mit einer ControlBox (Name: Ping_aktiviert) enthalten. Dieses Feld enhält zum Teil einen Haken oder auch keinen.

Was ich jetzt machen möchte ist folgendes:

Beim Starten soll das Datagrid nach dieser Spalte durchsucht werden und wenn der Wert = True ist, soll jeweils eine Aktion ausgeführt werden. In dem Falle ein Ping auf den Rechner (Name: PC), der sich im gleichen Datensatz befindet und bei erfolgreichen Ping soll eine MsgBox erscheinen.
Der Ping soll aber nicht permanent gesendet werden, sondern nur alle 5 - 10 min.
Diese Prozedur soll aber für alle Rechner stattfinden, die in der Controlbox barkiert wurden.

Ich hoffe, ihr könnt meinen Gedankengängen halbwegs folgen.

Danke & Gruß

Thomas
 
Hallo Thomas,

ich bin mir nicht sicher was du mit einer Controlbox meinst, ich denke du meinst die Checkbox. Welche Sprache benutzt du?
Ob die Spalte im DataGrid vorhanden ist kannst du mittels
DataGrid.Columns.Contains(Spaltenname) prüfen. Wenn gefunden mußt du alle Zeilen im Grid (Foreach oder mit For) durchgehen und dir den Cell.Value ausgeben lassen.
Visual Basic:
Foreach row as Datagridviewrow in DGV.Rows
  if(row.cells("").value=Ture)Then
   Dim p as new Net.NetworkInformation.Ping()
   p.Send(row.Cells("NamedesRechners"))
  end if
next

Das mit dem Zeitintervall erreichst du indem du einen Timer definierst, diesem ein Intervall zuweißt und das Event "Timer.Elapsed" abrufst
Visual Basic:
    Dim aTimer As New System.Timers.Timer()
    AddHandler aTimer.Elapsed, AddressOf TimerAbgelaufen

€: Muss dazu sagen, das der COde nicht getestet ist
 
Hallo Ronaldo,

danke für Deine schnelle Antwort.

Ich verwende die Sprache Microsoft Visual Basic 2005 Express Edition.

Werde es gleich mal testen.

Gruß, Thomas
 
Hallo,

habe es gerade versucht zu testen, aber er kennt irgendwie das

Code:
DGV.Rows

nicht. Ich habe schon den kompletten Namen des Datagrids reingeschrieben, aber dann meckert er wieder in wieder in Zeile 4.

Stehe jetzt irgendwie auf dem Schlauch :-(.

Gruß, Thomas
 
Ups, mein Fehler. Du verwendest ja ein DataGrid. Damit arbeite ich leider nicht. Ich setzte immer eine DataGridView ein. Weiß nicht in wie Weit sich diese beiden Controls unterscheiden. Wenn du meinst du kannst auch eine DataGridView verwenden, dürfte der oben genannte Code gehen.
 
Hallo,

leider bin ich noch immer nicht weiter mit dem Code gekommen:

Code:
For Each row As DataGridViewRow In Me.Desktop_NotebooksDataGridView.Rows
            If (row.Cells("Ping_aktiviert").Value = True) Then
                Dim p As New Net.NetworkInformation.Ping()
                p.Send(row.Cells("DRS"))
            End If
        Next

Der Name "DRS" ist der Spaltenname, wo der Rechner drinsteht. In der Fehlerliste gibt er mir die folgende Beschreibung zurück:

"Fehler bei der Überladungsauflösung, da keine zugreifbare "Send" mit diesen Argumenten aufgerufen werden kann:
'Public Function Send(address As System.Net.IPAddress) As System.Net.NetworkInformation.PingReply':
Der Wert vom Typ "System.Windows.Forms.DataGridViewCell" kann nicht zu "System.Net.IPAddress" konvertiert werden.
'Public Function Send(hostNameOrAddress As String) As System.Net.NetworkInformation.PingReply':
Der Wert vom Typ "System.Windows.Forms.DataGridViewCell" kann nicht zu "String" konvertiert werden."

Kann mir hier bitte jemand helfen?

Danke & Gruß

Thomas
 
Der Wert vom Typ "System.Windows.Forms.DataGridViewCell" kann nicht zu "System.Net.IPAddress" konvertiert werden.
Der Wert vom Typ "System.Windows.Forms.DataGridViewCell" kann nicht zu "String" konvertiert werden."
Die Fehlermeldung sagt doch alles ;)

Problem ist du übergibst an Send ein DataGridViewCell Objekt
Code:
p.Send(row.Cells("DRS"))
richtig müsste es lauten
Code:
p.Send(row.Cells("DRS").Value.ToString())
um den Wert der Zelle zu übergeben
 
Hallo Spyke,

das hat erstmal funktioniert, aber jetzt kämpfe ich grad mir der nächsten Fehlermeldung:

Die Spalte DRS kann nicht gefunden werden.

Parametername: columnName

Dieser Fehler erscheint, wenn ich den Code im übersetzten Projekt aufrufe.
Hab schon die Datenbank überprüft, ob die Spalte mit dem Namen "DRS" vorhanden ist.
Ja, und es gibt sie wirklich.

Warum meckert er denn hier?

Thomas
 
Wenn es die Spalte in der Datenbank gibt muss sie ja noch lange nicht mit diesem Namen im DataGridView existieren.

Prüf doch mal, ob es diese Spalte tatsächlich im DataGridView gibt.
 
Hallo,

die Spalte "DRS" existiert auch im DatagridView. Was mir aber nicht ganz klar ist, ist folgendes:

Kann es daran liegen, weil die Spalte "Ping_aktiviert" ganz rechts im DataGridview liegt und die Spalte "DRS" weiter in der Mitte. Und somit schon vorher übersprungen wurde?

Oder schaut er trotzdem in der kompletten Zeile nach?

Gruß, Thomas
 
Zurück