DataGridView kolumna pole - wartość i funkcjonalność

głosy
17

Dodałem kolumny pole wyboru aby DataGridView w moim formularzu C #. Funkcja musi być dynamiczne - wybierz jesteś klientem i że wychowuje ich wszystkich elementów, które mogą być obsługiwane, i wybrać, które z nich chcesz być serwisowane tym razem.

W każdym razie, kod zostanie teraz dodać chckbox do początku DGV. Co muszę wiedzieć, jest następująca:

1) W jaki sposób mogę zrobić to tak, że cała kolumna jest „zaznaczone” domyślnie? 2) W jaki sposób mogę się upewnić, ja tylko uzyskanie wartości od „zaznaczone” wiersze po kliknięciu na przycisk tuż poniżej DGV?

Oto kod, aby uzyskać kolumny brzmieniu:

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

Więc, co dalej? Każda pomoc będzie bardzo mile widziane!

Utwórz 06/08/2009 o 10:17
źródło użytkownik
W innych językach...                            


11 odpowiedzi

głosy
37

  1. Nie ma sposobu, aby to zrobić bezpośrednio. Po uzyskaniu danych w siatce można pętli wierszy i sprawdzić każde okno jak poniżej:

    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
        row.Cells[CheckBoxColumn1.Name].Value = true;
    }
    
  2. Zdarzenie Click może wyglądać następująco:

    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
    }
    
Odpowiedział 06/08/2009 o 13:17
źródło użytkownik

głosy
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());
}

Najlepszym rozwiązaniem, aby dowiedzieć się, czy pole wyboru w DataGridView jest sprawdzane, czy nie.

Odpowiedział 29/08/2010 o 18:39
źródło użytkownik

głosy
3

zajęło mi dużo czasu, aby dowiedzieć się, jak to zrobić bez konieczności pętli przez wszystkie rekordy. Mam związany DataGridView-source, a wszystkie pola są związani z wyjątkiem checkbox-kolumny. Więc nie mam / potrzebujemy pętli, aby dodać każdy wiersz i nie chcę, aby utworzyć jedną tylko Do tego celu. Tak więc po wielu próbuje w końcu dostał. I to jest rzeczywiście bardzo prosty zbyt:

Najpierw trzeba dodać nowy .cs Plik do projektu z komórki na zamówienie pole wyboru, np

DataGridViewCheckboxCellFilter.cs:

using System.Windows.Forms;

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

Po tym, na GridView, gdzie można dodać pole wyboru-kolumnę zrobić:

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

I to wszystko! Everytime twoi checkboxes dodawane w nowym wierszu, zostaną one ustawione na true. Cieszyć się!

Odpowiedział 23/05/2011 o 00:35
źródło użytkownik

głosy
4

Oto odpowiedź jedna wkładka na to pytanie

List<DataGridViewRow> list = DataGridView1.Rows.Cast<DataGridViewRow>().Where(k => Convert.ToBoolean(k.Cells[CheckBoxColumn1.Name].Value) == true).ToList();
Odpowiedział 24/01/2012 o 07:37
źródło użytkownik

głosy
1

Jeśli masz GridView zawierające więcej niż jedno pole wyboru .... trzeba spróbować ....

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());
        }
    }
}
Odpowiedział 16/02/2012 o 07:29
źródło użytkownik

głosy
3

Jeśli spróbujesz go na CellContentClickEvent

Posługiwać się:

dataGridView1.EndEdit();  //Stop editing of cell.
MessageBox.Show("0 = " + dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString());
Odpowiedział 03/10/2012 o 15:24
źródło użytkownik

głosy
0

Aby sprawdzić, czy kolumna jest zaznaczona czy nie:

for (int i = 0; i < dgvName.Rows.Count; i++)
{
    if ((bool)dgvName.Rows[i].Cells[8].Value)
    {
    // Column is checked
    }
}
Odpowiedział 12/01/2013 o 07:25
źródło użytkownik

głosy
1

1) W jaki sposób mogę zrobić to tak, że cała kolumna jest „zaznaczone” domyślnie?

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) W jaki sposób mogę się upewnić, ja tylko uzyskanie wartości od „zaznaczone” wiersze?

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
    }
}
Odpowiedział 30/10/2014 o 05:31
źródło użytkownik

głosy
0

jeśli u uczynić tę kolumnę w bazie danych sql (BIT) jako typ danych u należy edytować ten kod

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

z tym

DataGridViewCheckBoxColumn doWork = new DataGridViewCheckBoxColumn();
            doWork.HeaderText = "Include Dog";
            doWork.FalseValue = "False";
            doWork.TrueValue = "True";
            dataGridView1.Columns.Insert(0, doWork);
Odpowiedział 01/06/2016 o 23:10
źródło użytkownik

głosy
0

Jest to dość proste,

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;
 }
Odpowiedział 30/06/2019 o 09:40
źródło użytkownik

głosy
0

Jeśli kolumna została już utworzona ze względu na wiązanie z rekordów typu BIT, typ kolumny będzie tekst tak. Roztwór i stwierdzili, jest usunięcie tej kolumny i zastąpienie go „DataGridViewCheckBoxColumn” posiadające takie same dane wiązania.

            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);
Odpowiedział 15/07/2019 o 17:25
źródło użytkownik

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