DataGridView στήλη checkbox - αξία και τη λειτουργικότητα

ψήφοι
17

Έχω προσθέσει μια στήλη πλαίσιο ελέγχου για ένα DataGridView σε C # φόρμα μου. Η λειτουργία πρέπει να είναι δυναμική - μπορείτε να επιλέξετε ένα πελάτη και αυτό φέρνει στην επιφάνεια όλα τα στοιχεία τους που θα μπορούσαν να εξυπηρετούνται, και μπορείτε να επιλέξετε ποια από αυτά επιθυμείτε να εξυπηρετούνται αυτή τη φορά.

Τέλος πάντων, ο κώδικας θα προσθέσει τώρα ένα chckbox στην αρχή της ΓΔ V. Αυτό που πρέπει να ξέρετε είναι το εξής:

1) Πώς μπορώ να το κάνω έτσι ώστε ολόκληρη η στήλη «ελέγχεται» από προεπιλογή; 2) Πώς μπορώ να βεβαιωθώ ότι είμαι πάρει μόνο τις τιμές από τα «ελέγχεται» γραμμές όταν κάνω κλικ σε ένα κουμπί ακριβώς κάτω από την ΓΔ V;

Εδώ είναι ο κώδικας για να πάρει τη στήλη εισάγεται:

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

Έτσι, ποιο είναι το επόμενο; Οποιαδήποτε βοήθεια θα εκτιμηθεί ιδιαίτερα!

Δημοσιεύθηκε 06/08/2009 στις 10:17
πηγή χρήστη
Σε άλλες γλώσσες...                            


11 απαντήσεις

ψήφοι
37

  1. Δεν υπάρχει κανένας τρόπος για να γίνει αυτό άμεσα. Μόλις έχετε τα δεδομένα σας στο δίκτυο, θα βρόχο μέσα από τις γραμμές και να ελέγχει κάθε κουτί σαν αυτό:

    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
        row.Cells[CheckBoxColumn1.Name].Value = true;
    }
    
  2. Το συμβάν Click μπορεί να μοιάζει κάπως έτσι:

    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
    }
    
Απαντήθηκε 06/08/2009 στις 13:17
πηγή χρήστη

ψήφοι
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());
}

καλύτερη λύση για να βρούμε αν το πεδίο ελέγχου στην datagridview ελέγχεται ή όχι.

Απαντήθηκε 29/08/2010 στις 18:39
πηγή χρήστη

ψήφοι
3

μου πήρε πολύ χρόνο για να καταλάβω πώς να το κάνουμε αυτό χωρίς να χρειάζεται να βρόχο μέσω όλων των αρχείων. Έχω ένα δεσμευμένο datagridview-πηγή, και όλα τα πεδία είναι βέβαιο εκτός από το πλαίσιο ελέγχου-στήλη. Γι 'αυτό και δεν έχουν / χρειάζονται ένα βρόχο για να προσθέσετε κάθε σειρά και δεν θέλετε να δημιουργήσετε ένα μόνο γι' αυτό το purpuse. Έτσι, μετά από πολλή προσπαθεί τελικά το πήρα. Και είναι πραγματικά πολύ απλό πάρα πολύ:

Πρώτα θα προσθέσετε ένα νέο αρχείο .cs στο έργο σας με ένα κύτταρο παραγγελία πλαίσιο ελέγχου, π.χ.

DataGridViewCheckboxCellFilter.cs:

using System.Windows.Forms;

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

Μετά από αυτό, σε GridView σας, όπου μπορείτε να προσθέσετε το πλαίσιο ελέγχου-στήλη, μπορείτε να κάνετε:

// 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);

Και αυτό είναι όλο! Κάθε φορά πλαίσια ελέγχου σας να προστεθεί σε μια νέα σειρά, που θα πρέπει να οριστεί σε true. Απολαμβάνω!

Απαντήθηκε 23/05/2011 στις 00:35
πηγή χρήστη

ψήφοι
4

Εδώ είναι μια μία επένδυση απάντηση για αυτήν την ερώτηση

List<DataGridViewRow> list = DataGridView1.Rows.Cast<DataGridViewRow>().Where(k => Convert.ToBoolean(k.Cells[CheckBoxColumn1.Name].Value) == true).ToList();
Απαντήθηκε 24/01/2012 στις 07:37
πηγή χρήστη

ψήφοι
1

Αν έχετε το GridView που περιέχουν περισσότερα από ένα κουτάκι .... θα πρέπει να δοκιμάσετε αυτό ....

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());
        }
    }
}
Απαντήθηκε 16/02/2012 στις 07:29
πηγή χρήστη

ψήφοι
3

Αν το δοκιμάσετε στο CellContentClickEvent

Χρήση:

dataGridView1.EndEdit();  //Stop editing of cell.
MessageBox.Show("0 = " + dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString());
Απαντήθηκε 03/10/2012 στις 15:24
πηγή χρήστη

ψήφοι
0

Για να δοκιμαστεί εάν η στήλη ελέγχεται ή όχι:

for (int i = 0; i < dgvName.Rows.Count; i++)
{
    if ((bool)dgvName.Rows[i].Cells[8].Value)
    {
    // Column is checked
    }
}
Απαντήθηκε 12/01/2013 στις 07:25
πηγή χρήστη

ψήφοι
1

1) Πώς μπορώ να το κάνω έτσι ώστε ολόκληρη η στήλη «ελέγχεται» από προεπιλογή;

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) Πώς μπορώ να βεβαιωθώ ότι είμαι πάρει μόνο τις τιμές από τα «ελέγχεται» σειρές;

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
    }
}
Απαντήθηκε 30/10/2014 στις 05:31
πηγή χρήστη

ψήφοι
0

αν u κάνει αυτή τη στήλη σε βάση δεδομένων SQL (bit) ως τύπο δεδομένων u θα πρέπει να επεξεργαστείτε τον κώδικα

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

με αυτό

DataGridViewCheckBoxColumn doWork = new DataGridViewCheckBoxColumn();
            doWork.HeaderText = "Include Dog";
            doWork.FalseValue = "False";
            doWork.TrueValue = "True";
            dataGridView1.Columns.Insert(0, doWork);
Απαντήθηκε 01/06/2016 στις 23:10
πηγή χρήστη

ψήφοι
0

Είναι πολύ απλό

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;
 }
Απαντήθηκε 30/06/2019 στις 09:40
πηγή χρήστη

ψήφοι
0

Αν η στήλη σας έχει ήδη δημιουργήσει λόγω της σύνδεσης με ένα σύνολο εγγραφών τύπου BIT, ο τύπος της στήλης θα είναι το κείμενο ούτως ή άλλως. Η λύση που βρήκα είναι να αφαιρέσετε αυτήν τη στήλη και να την αντικαταστήσει με μια «DataGridViewCheckBoxColumn» που έχει τα ίδια δεδομένα σύνδεσης.

            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);
Απαντήθηκε 15/07/2019 στις 17:25
πηγή χρήστη

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