coloană căsuță DataGridView - valoarea și funcționalitatea

voturi
17

Am adăugat o coloană casetă de selectare pentru o DataGridView în forma mea # C. Funcția trebuie să fie dinamic - selectați un client și care aduce toate elementele lor, care ar putea fi deservite, și selectați care dintre ele doriți să fie deservite de data aceasta în jurul valorii.

Oricum, codul va adăuga acum un chckbox la începutul DGV. Ceea ce trebuie să știu este următorul:

1) Cum pot face în așa fel încât întreaga coloană este „verificat“ în mod implicit? 2) Cum pot să mă asigur că eu sunt doar obtinerea de valori din rândurile „bifate“ când dau click pe un buton chiar sub DGV?

Iată codul pentru a obține coloana introduce:

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

Deci ce urmează? Orice ajutor ar fi apreciat foarte mult!

Întrebat 06/08/2009 la 10:17
sursa de către utilizator
În alte limbi...                            


11 răspunsuri

voturi
37

  1. Nu există nici o modalitate de a face acest lucru în mod direct. După ce datele dvs. în rețea, puteți bucla prin rânduri și verificați fiecare cutie astfel:

    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
        row.Cells[CheckBoxColumn1.Name].Value = true;
    }
    
  2. Faceți clic pe eveniment ar putea arata ceva de genul:

    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
    }
    
Publicat 06/08/2009 la 13:17
sursa de către utilizator

voturi
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());
}

cea mai bună soluție pentru a găsi în cazul în care caseta de selectare din DataGridView este verificat sau nu.

Publicat 29/08/2010 la 18:39
sursa de către utilizator

voturi
3

mi-a luat o lungă perioadă de timp să dau seama cum de a face acest lucru, fără a fi nevoie să procesați toate înregistrările. Am un DataGridView-sursă legat, și toate câmpurile sunt legate cu excepția casetă de selectare coloana. Așa că nu am / nevoie de o buclă pentru a adăuga fiecare rând și nu am vrut să creeze unul doar pentru acest purpuse. Deci, după o mulțime de a încerca în final, am luat-o. Și este de fapt foarte simplu prea:

Mai întâi adăugați un nou fișier .cs la proiect cu o celulă personalizat caseta de selectare, de exemplu,

DataGridViewCheckboxCellFilter.cs:

using System.Windows.Forms;

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

După aceasta, pe GridView dvs., în cazul în care adăugați caseta de selectare-coloană, faceți:

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

Si asta e! Everytime casetele de selectare dvs. se adaugă într-un rând nou, acestea vor fi setat la true. Bucurați-vă!

Publicat 23/05/2011 la 00:35
sursa de către utilizator

voturi
4

Iată un răspuns de o linie pentru această întrebare

List<DataGridViewRow> list = DataGridView1.Rows.Cast<DataGridViewRow>().Where(k => Convert.ToBoolean(k.Cells[CheckBoxColumn1.Name].Value) == true).ToList();
Publicat 24/01/2012 la 07:37
sursa de către utilizator

voturi
1

Dacă aveți un gridview care conține mai mult de o casetă de selectare .... ar trebui să încercați acest lucru ....

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());
        }
    }
}
Publicat 16/02/2012 la 07:29
sursa de către utilizator

voturi
3

Dacă-l încercați pe CellContentClickEveniment

Utilizare:

dataGridView1.EndEdit();  //Stop editing of cell.
MessageBox.Show("0 = " + dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString());
Publicat 03/10/2012 la 15:24
sursa de către utilizator

voturi
0

Pentru a testa dacă coloana este verificat sau nu:

for (int i = 0; i < dgvName.Rows.Count; i++)
{
    if ((bool)dgvName.Rows[i].Cells[8].Value)
    {
    // Column is checked
    }
}
Publicat 12/01/2013 la 07:25
sursa de către utilizator

voturi
1

1) Cum pot face în așa fel încât întreaga coloană este „verificat“ în mod implicit?

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) Cum pot să mă asigur că eu sunt doar obtinerea de valori din rândurile „verificate“?

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
    }
}
Publicat 30/10/2014 la 05:31
sursa de către utilizator

voturi
0

în cazul în care u face această coloană în baza de date sql (bit) ca un tip de date u ar trebui să modificați acest cod

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

cu asta

DataGridViewCheckBoxColumn doWork = new DataGridViewCheckBoxColumn();
            doWork.HeaderText = "Include Dog";
            doWork.FalseValue = "False";
            doWork.TrueValue = "True";
            dataGridView1.Columns.Insert(0, doWork);
Publicat 01/06/2016 la 23:10
sursa de către utilizator

voturi
0

Este destul de simplu

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;
 }
Publicat 30/06/2019 la 09:40
sursa de către utilizator

voturi
0

În cazul în care coloana a fost deja creat datorită legării cu un recordset de tip BIT, tipul coloanei va fi text, oricum. Soluția am găsit este de a elimina acea coloană și înlocuiți-l cu „DataGridViewCheckBoxColumn“ având aceleași date cu caracter obligatoriu.

            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);
Publicat 15/07/2019 la 17:25
sursa de către utilizator

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