2016-10-19 5 views
0
 if(e.Button == MouseButtons.Right) 
     { 
      string signatureDate = dataGridView3.CurrentRow.Cells[8].Value.ToString(); 
      // MessageBox.Show(signatureDate); 
      if(signatureDate.Length > 5) 
      { 
       contextMenuStrip1.Items[0].Visible = false; 
       contextMenuStrip1.Items[1].Visible = true; 
      }else 
      { 
       contextMenuStrip1.Items[0].Visible = true; 
       contextMenuStrip1.Items[1].Visible = false; 
      } 
     } 

Ich habe ein Kontext-Strip-Menü, das in meinem Datagridview funktioniert. Und ich habe es als Row Context Strip Menu ausgewählt.Context-Strip-Menüelement ein- und ausblenden C#

Was ich versuche zu tun, ist zu erhalten, wenn ausgewählte Reihe von DataGridview und Kontrolle Unterschrift Spalte ist null oder nicht. Wenn es Signaturdatum hat, möchte ich "Signieren" ein- und ausblenden und, wenn es kein Signaturdatum hat, das Element "Signieren" im Kontextmenü ausblenden.

Sie können in Bild I eingeschlossen sehen. Context menu Strip

EDIT: Name des Ereignisses ist MouseDown. EDIT 2: Mit der Bearbeitung dieses Codes kann ich Spalten Daten und zeigen sie auf messageBox. Aber ich kann diese Daten nicht als Bedingung verwenden. Daher funktioniert es nicht. Wenn ich zum Beispiel eine Zeile ohne "Signature Date" auswähle und sie auf messageBox zeige, funktioniert sie. Aber wenn ich Signaturdaten als Bedingung verwende, funktioniert es nicht. Ich weiß, dass es so seltsam und zu leicht zu überwinden ist, aber ich konnte deswegen nichts fangen.

EDIT 3: Event

EDIT 4 (GELÖST): I zu Context Streifen Menü erstellt und geben keine von ihnen als Context Streifen Menu von Datagridview.

Mit Datagridview_MouseDown-Ereignis, bekomme ich Signatur Datum Spalte Daten und überprüfen, ob es Null/leer ist oder nicht. Wenn es null/leer ist, spezifiziere ich den ersten Kontext-Menü-Streifen als Kontext-Streifen-Menü von Datagridview oder nicht, den ich überarbeite. Ich habe die Lösung auf diese Weise herausgefunden :)

+0

Der Code sieht gut aus. Platziere einfach einige Breakpoints und sieh ob es läuft oder nicht. – Emad

+0

Wie lautet der Name des Ereignisses, das diese Funktion auslöst? Stellen Sie sicher, es ist MouseDown –

+0

@Emad, danke für Ihre Antwort, ich bringe einige Breakpoints, es sieht gut aus, aber es funktioniert nicht. –

Antwort

0

Wahrscheinlich wird Ihr Ereignis nicht ausgelöst. Statt der Maus nach unten können Sie auch die Eröffnungsveranstaltung des löst Dies sollte

Context verwenden Ihr Problem

private void Form1_Load(object sender, EventArgs e) 
     { 
      dataGridView3.ContextMenu = contextMenuStrip1; 
      contextMenuStrip1.Opening += contextMenuStrip1_Opening; 
     } 


private void contextMenuStrip1_Opening(object sender, CancelEventArgs e) 
     { 
      string signatureDate = dataGridView3.CurrentRow.Cells[8].Value.ToString(); 
      // MessageBox.Show(signatureDate); 
      if (signatureDate.Length > 5) 
      { 
       contextMenuStrip1.Items[0].Visible = false; 
       contextMenuStrip1.Items[1].Visible = true; 
      } 
      else 
      { 
       contextMenuStrip1.Items[0].Visible = true; 
       contextMenuStrip1.Items[1].Visible = false; 
      } 
     } 
+0

Nein, es hat nicht funktioniert. Ich habe deine und Datagridview_Mouse auf deinem Weg versucht. Beide haben nicht gearbeitet. –

2

denke ich Ihr Problem in der Instanz von Kontextmenüleiste Verwendung ist dies eine sehen, ob es hilft.

if(e.Button == MouseButtons.Right) 
     { 
      string signatureDate = dataGridView3.CurrentRow.Cells[8].Value.ToString(); 
      // MessageBox.Show(signatureDate); 
      if(signatureDate.Length > 5) 
      { 
       dataGridView3.ContextMenu.Items[0].Visible = false; 
       dataGridView3.ContextMenu.Items[1].Visible = true; 
      }else 
      { 
       dataGridView3.ContextMenu.Items[0].Visible = true; 
       dataGridView3.ContextMenu.Items[1].Visible = false; 
      } 
     }