2016-03-30 5 views
1

umgeschaltet wird, ich habe eine Datagridview mit einer Spalte Checkbox enter image description hereCapture and Prevent Checkbox un/Check in Datagridview von automatisch

Was ich will, ist, wenn ein Kontrollkästchen klicken (i verwenden CellContentClick Ereignis) zeige ich möchte ein messageBox Wenn der Benutzer ok drückt, wird das Kontrollkästchen aktiviert und die neue Abfrage gestartet. Sonst drücken Annull oder Close Messagebox -> Kontrollkästchen nicht markiert.

Aber ich habe ein Problem zu implementiert ..

private void dgvApprovazione_CellContentClick(object sender, DataGridViewCellEventArgs e) 
    { 
     try 
     { 

      if (dgvApprovazione.Rows[e.RowIndex].Cells[e.ColumnIndex] is DataGridViewCheckBoxCell) 
      { 
       CheckBox checkboxTmp = sender as CheckBox; 

       checkboxTmp.AutoCheck = false; 


      } 


     } 
     catch(Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 

EDIT --- Ich habe Zugang zu nicht-Fenster zu entwerfen. Checkbox ist eine Dinamyc-Spalte, die das Ergebnis der DB-Leseoperation ist. Felder in DB ist ein True/False-Typ .. In Datagridview habe ich Kontrollkästchen mit Kontrollkästchen oder deaktivieren.

ich automatische Überprüfung möge ‚Code-time‘ erfassen und verhindern

+0

Entschuldigung, jetzt bin ich Spezifikation ..... I'havent Zugang zur Entwurfszeit ... Weil Checkbox ist ein DB-Ergebnis über ein Feld (wahr/falsch). – rul3z

Antwort

1

Sie die Spalte nur beim Start gelesen machen können oder wenn Sie die Spalte ReadOnly Eigenschaft der Spalte hinzufügen, dann CelllContextClick handhaben und die Meldung Box und den Wert der Zelle auf Meldungsfeld Ergebnis basiert gesetzt:

private void Form1_Load(object sender, EventArgs e) 
{ 
    //Load data 
    //Add columns 

    //I suppose your desired coulmn is at index 0 
    this.dataGridView1.Columns[0].ReadOnly = true; 
} 

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) 
{ 
    //I suppose your desired coulmn is at index 0 
    if (e.ColumnIndex == 0 && e.RowIndex >= 0) 
    { 
     var result = MessageBox.Show("Check Item?", "", MessageBoxButtons.YesNoCancel); 
     if (result == System.Windows.Forms.DialogResult.Yes) 
     { 
      ((DataGridView)sender)[e.ColumnIndex, e.RowIndex].Value = true; 
     } 
     else 
     { 
      ((DataGridView)sender)[e.ColumnIndex, e.RowIndex].Value = false; 
     } 
    } 
} 

Es ist kein echtes CheckBox in der Zelle ist und der Absender der Veranstaltung ist DataGridView.

+0

Basierend auf Ihrer vorherigen Frage, müssen Sie möglicherweise überprüfen, ob die angeklickte Zelle nicht zu der neuen Zeile gehört: Verwenden Sie 'e.RowIndex! = DataGridView1.newRowIndex' –

+0

Im Falle meiner Checkbox ist es bereits aktiviert, diese Strategie doesn Verhindern Sie das automatische Überprüfen oder Entfernen der Markierung. Aber arbeiten gut, wenn Sie die Option deaktivieren ... ich möchte nur Lese-Checkbox, wenn aktiviert ist. – rul3z

+1

Es spielt keine Rolle, ob das Kontrollkästchen aktiviert ist oder nicht. Der Job, den wir hier machen, ist ** 1 - ** Die Zelle nur lesen lassen. Sie können es also nicht manuell aktivieren oder deaktivieren. ** 2 - ** Behandle 'CellContentClick' und lege dort eine Logik an, um eine Logik für das Aktivieren oder Deaktivieren bereitzustellen. ** So ** Sie können hier irgendeine Logik haben. Zum Beispiel können Sie value =! Value setzen, wenn Sie die Elementprüfung oder eine andere Logik umschalten möchten. –

Verwandte Themen