Datagridview Checkbox Spalte - Wert und Funktionalität

stimmen
17

Ich habe eine Checkbox Spalte zu einem Datagridview in meiner C # Form hinzugefügt. Die Funktion muss dynamisch sein - Sie wählen einen Kunden und das bringt alle ihre Einzelteile auf, die bedient werden können, und Sie auswählen, welche davon Sie wollen um diese Zeit gewartet werden.

Auf jeden Fall wird der Code nun einen chckbox zu Beginn des DGV hinzuzufügen. Was muss ich wissen, ist die folgende:

1) Wie kann ich es so, dass die ganze Spalte wird „geprüft“ standardmäßig? 2) Wie kann ich sicherstellen, dass ich nur Werte aus den „geprüft“ Reihen bekommen, wenn ich auf einen Knopf klicken knapp unter dem DGV?

Hier ist der Code, die Spalte zu bekommen eingefügt:

DataGridViewCheckBoxColumn doWork = new DataGridViewCheckBoxColumn();
            doWork.HeaderText = Include Dog;
            doWork.FalseValue = 0;
            doWork.TrueValue = 1;
            dataGridView1.Columns.Insert(0, doWork);

Also, was als nächstes? Jede Hilfe wäre sehr dankbar!

Veröffentlicht am 06/08/2009 um 10:17
quelle vom benutzer
In anderen Sprachen...                            


11 antworten

stimmen
37

  1. Es gibt keine Möglichkeit, dass direkt zu tun. Sobald Sie Ihre Daten in das Netz haben, können Sie eine Schleife durch die Reihen und prüfen Sie jedes Feld wie folgt aus:

    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
        row.Cells[CheckBoxColumn1.Name].Value = true;
    }
    
  2. Das Click-Ereignis könnte wie folgt aussehen:

    private void button1_Click(object sender, EventArgs e)
    {
        List<DataGridViewRow> rows_with_checked_column = new List<DataGridViewRow>();
        foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            if (Convert.ToBoolean(row.Cells[CheckBoxColumn1.Name].Value) == true)
            {
                rows_with_checked_column.Add(row);
            }
        }
        // Do what you want with the check rows
    }
    
Beantwortet am 06/08/2009 um 13:17
quelle vom benutzer

stimmen
14
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    DataGridViewCheckBoxCell ch1 = new DataGridViewCheckBoxCell();
    ch1 = (DataGridViewCheckBoxCell)dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[0];

    if (ch1.Value == null)
        ch1.Value=false;
    switch (ch1.Value.ToString())
    {
        case "True":
            ch1.Value = false;
            break;
        case "False":
            ch1.Value = true;
            break;
    }
    MessageBox.Show(ch1.Value.ToString());
}

beste Lösung zu finden, wenn die Checkbox in der Datagridview aktiviert sind oder nicht.

Beantwortet am 29/08/2010 um 18:39
quelle vom benutzer

stimmen
3

es dauerte eine lange Zeit, um herauszufinden, wie diese durch alle Datensätze in einer Schleife, ohne zu tun. Ich habe eine gebundene Datagridview-Quelle, und alle Felder mit Ausnahme der Checkbox-Säule gebunden. So habe / ich nicht eine Schleife muß jede Zeile hinzufügen, und ich wollte nicht erstellen nur für diesen purpuse. Also nach viel versucht habe ich es endlich geschafft. Und es ist eigentlich auch sehr einfach:

Zuerst mit einer individuell Checkbox Zelle eine neue CS-Datei zu Ihrem Projekt hinzufügen, zum Beispiel

DataGridViewCheckboxCellFilter.cs:

using System.Windows.Forms;

namespace MyNamespace {
    public class DataGridViewCheckboxCellFilter : DataGridViewCheckBoxCell {
        public DataGridViewCheckboxCellFilter() : base() {
            this.FalseValue = 0;
            this.TrueValue = 1;
            this.Value = TrueValue;
        }
    }
}

Danach wird auf dem Gridview, wo Sie die Checkbox-Spalte hinzufügen, die Sie tun:

// add checkboxes
DataGridViewCheckBoxColumn col_chkbox = new DataGridViewCheckBoxColumn();
{
    col_chkbox.HeaderText = "X";
    col_chkbox.Name = "checked";
    col_chkbox.CellTemplate = new DataGridViewCheckboxCellFilter();                
}
this.Columns.Add(col_chkbox);

Und das ist es! Jedesmal, Ihre Kontrollkästchen in einer neuen Zeile hinzugefügt bekommen, werden sie auf true gesetzt werden. Genießen!

Beantwortet am 23/05/2011 um 00:35
quelle vom benutzer

stimmen
4

Hier ist eine Einzeiler Antwort auf diese Frage

List<DataGridViewRow> list = DataGridView1.Rows.Cast<DataGridViewRow>().Where(k => Convert.ToBoolean(k.Cells[CheckBoxColumn1.Name].Value) == true).ToList();
Beantwortet am 24/01/2012 um 07:37
quelle vom benutzer

stimmen
1

Wenn Sie eine Gridview, die mehr als ein Kontrollkästchen haben .... sollten Sie versuchen, diese ....

Object[] o=new Object[6];

for (int i = 0; i < dgverlist.RowCount; i++)
{
    for (int j = 2; j < dgverlist.ColumnCount; j++)
    {
        DataGridViewCheckBoxCell ch1 = new DataGridViewCheckBoxCell();
        ch1 = (DataGridViewCheckBoxCell)dgverlist.Rows[i].Cells[j];

        if (ch1.Value != null)
        {
           o[i] = ch1.OwningColumn.HeaderText.ToString();

            MessageBox.Show(o[i].ToString());
        }
    }
}
Beantwortet am 16/02/2012 um 07:29
quelle vom benutzer

stimmen
3

Wenn Sie versuchen , es auf CellContentClickEreignis

Benutzen:

dataGridView1.EndEdit();  //Stop editing of cell.
MessageBox.Show("0 = " + dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString());
Beantwortet am 03/10/2012 um 15:24
quelle vom benutzer

stimmen
0

Um zu testen, ob die Spalte aktiviert ist oder nicht:

for (int i = 0; i < dgvName.Rows.Count; i++)
{
    if ((bool)dgvName.Rows[i].Cells[8].Value)
    {
    // Column is checked
    }
}
Beantwortet am 12/01/2013 um 07:25
quelle vom benutzer

stimmen
1

1) Wie kann ich es so, dass die ganze Spalte wird „geprüft“ standardmäßig?

var doWork = new DataGridViewCheckBoxColumn();
doWork.Name = "IncludeDog" //Added so you can find the column in a row
doWork.HeaderText = "Include Dog";
doWork.FalseValue = "0";
doWork.TrueValue = "1";

//Make the default checked
doWork.CellTemplate.Value = true;
doWork.CellTemplate.Style.NullValue = true;

dataGridView1.Columns.Insert(0, doWork);

2) Wie kann ich sicherstellen, dass ich nur Werte aus den „geprüft“ Reihen zu bekommen?

foreach (DataGridViewRow row in dataGridView1.Rows)
{
    if (row.IsNewRow) continue;//If editing is enabled, skip the new row

    //The Cell's Value gets it wrong with the true default, it will return         
    //false until the cell changes so use FormattedValue instead.
    if (Convert.ToBoolean(row.Cells["IncludeDog"].FormattedValue))
    {
        //Do stuff with row
    }
}
Beantwortet am 30/10/2014 um 05:31
quelle vom benutzer

stimmen
0

wenn u diese Spalte in SQL-Datenbank (bit) als Datentyp machen sollte u diesen Code bearbeiten

DataGridViewCheckBoxColumn doWork = new DataGridViewCheckBoxColumn();
            doWork.HeaderText = "Include Dog";
            doWork.FalseValue = "0";
            doWork.TrueValue = "1";
            dataGridView1.Columns.Insert(0, doWork);

mit diesem

DataGridViewCheckBoxColumn doWork = new DataGridViewCheckBoxColumn();
            doWork.HeaderText = "Include Dog";
            doWork.FalseValue = "False";
            doWork.TrueValue = "True";
            dataGridView1.Columns.Insert(0, doWork);
Beantwortet am 01/06/2016 um 23:10
quelle vom benutzer

stimmen
0

Es ist ganz einfach

DataGridViewCheckBoxCell checkedCell = (DataGridViewCheckBoxCell) grdData.Rows[e.RowIndex].Cells["grdChkEnable"];

                bool isEnabled = false;
                if (checkedCell.AccessibilityObject.State.HasFlag(AccessibleStates.Checked))
                {
                    isEnabled = true;
                }
if(isEnabled)
 {
   // do your business process;
 }
Beantwortet am 30/06/2019 um 09:40
quelle vom benutzer

stimmen
0

Wenn Ihre Spalt bereits erstellt wurden wegen mit einem Re-Cord von BIT-Typ, der Typ der Spalte Bindung wird der Text sowieso sein. Die Lösung, die ich gefunden habe, ist, dass die Säule zu entfernen und ersetzen sie durch eine „DataGridViewCheckBoxColumn“ die gleichen Bindungsdaten.

            DataGridViewColumn oldCol = dgViewCategory.Columns["mycolumn"];
            int chkIdx = oldCol.Index;
            DataGridViewCheckBoxColumn chkCol = new DataGridViewCheckBoxColumn();
            chkCol.HeaderText = oldCol.HeaderText;
            chkCol.FalseValue = "False";
            chkCol.TrueValue = "True";
            chkCol.DataPropertyName = oldCol.DataPropertyName;
            chkCol.Name = oldCol.Name;
            dgViewCategory.Columns.RemoveAt(chkIdx);
            dgViewCategory.Columns.Insert(chkIdx, chkCol);
Beantwortet am 15/07/2019 um 17:25
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more