DataGridView kutusunun sütunu - değeri ve işlevselliği

oy
17

Benim C # formda bir DataGridView onay kutusunu sütun ekledik. fonksiyonu dinamik olması gerekiyor - Eğer bir müşteri seçin ve bu hizmet verilebilir onların tüm öğeleri getirir ve siz bu sefer hizmet verilecek diliyorum onlardan hangi seçin.

Neyse, kod artık DGV'nin başına bir chckbox katacak. Ne bilmeniz gereken şudur:

1) Nasıl varsayılan olarak bu bütün sütun işaretli böylece yapabilirim? 2) nasıl sadece ben sadece DGV'nin altında bir düğmeye tıkladığınızda işaretli satırları değerleri alıyorum emin olabilirim?

İşte yerleştirilen sütun almak için kod:

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

Sonra ne? Herhangi bir yardım büyük takdir!

Oluştur 06/08/2009 saat 10:17
kaynak kullanıcı
Diğer dillerde...                            


11 cevaplar

oy
37

  1. doğrudan Bunu yapmanın bir yolu yoktur. Eğer ızgara verilerinizi aldıktan sonra, satırlar arasında döngü ve bunun gibi her kutuyu kontrol edebilirsiniz:

    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
        row.Cells[CheckBoxColumn1.Name].Value = true;
    }
    
  2. Tıklama etkinlik şöyle görünebilir:

    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
    }
    
Cevap 06/08/2009 saat 13:17
kaynak kullanıcı

oy
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 onay kutusunun işaretli olup olmadığını en iyi çözüm bulmak için.

Cevap 29/08/2010 saat 18:39
kaynak kullanıcı

oy
3

bana bütün kayıtlar arasında döngü zorunda kalmadan bunu nasıl anlamaya uzun bir zaman aldı. Ben bağlı DataGridView-kaynağına sahip ve tüm alanları onay kutusu sütunlu hariç bağlıdırlar. Bu yüzden / var her satır eklemek için bir döngü ihtiyaç ve sadece bu purpuse için bir tane oluşturmak istemedim yoktur. Yani çalışırken bir sürü sonra nihayet aldım. Ve çok aslında çok basit:

Önce bir özel onay kutusu hücresi, mesela ile projenize yeni bir .cs dosyası eklemek

DataGridViewCheckboxCellFilter.cs:

using System.Windows.Forms;

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

Bundan sonra, onay kutusunun-sütun eklemek için GridView üzerinde, yapmanız:

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

Ve bu kadar! senin onay kutularını yeni bir satırda eklense her şey, onlar gerçek olarak ayarlanmış olacak. Keyfini çıkarın!

Cevap 23/05/2011 saat 00:35
kaynak kullanıcı

oy
4

İşte bu soru için bir astar cevabı

List<DataGridViewRow> list = DataGridView1.Rows.Cast<DataGridViewRow>().Where(k => Convert.ToBoolean(k.Cells[CheckBoxColumn1.Name].Value) == true).ToList();
Cevap 24/01/2012 saat 07:37
kaynak kullanıcı

oy
1

Eğer birden fazla kutuyu içeren bir GRIDVIEW varsa .... sen bu denemelisiniz ....

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());
        }
    }
}
Cevap 16/02/2012 saat 07:29
kaynak kullanıcı

oy
3

Eğer bunu denerseniz CellContentClickOlay

kullanın:

dataGridView1.EndEdit();  //Stop editing of cell.
MessageBox.Show("0 = " + dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString());
Cevap 03/10/2012 saat 15:24
kaynak kullanıcı

oy
0

Sütun kontrol olup olmadığını test etmek için:

for (int i = 0; i < dgvName.Rows.Count; i++)
{
    if ((bool)dgvName.Rows[i].Cells[8].Value)
    {
    // Column is checked
    }
}
Cevap 12/01/2013 saat 07:25
kaynak kullanıcı

oy
1

1) Nasıl varsayılan olarak bu bütün sütun "işaretli" böylece yapabilirim?

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) nasıl sadece "işaretli" satırları değerleri alıyorum emin olabilirim?

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
    }
}
Cevap 30/10/2014 saat 05:31
kaynak kullanıcı

oy
0

u veri türü olarak sql veritabanı (bit) Bu sütunu yaparsanız u bu kodu düzenlemeniz gerekir

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

Bununla

DataGridViewCheckBoxColumn doWork = new DataGridViewCheckBoxColumn();
            doWork.HeaderText = "Include Dog";
            doWork.FalseValue = "False";
            doWork.TrueValue = "True";
            dataGridView1.Columns.Insert(0, doWork);
Cevap 01/06/2016 saat 23:10
kaynak kullanıcı

oy
0

Oldukça basit

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;
 }
Cevap 30/06/2019 saat 09:40
kaynak kullanıcı

oy
0

Sütun zaten BIT türünde bir kayıt ile bağlanmasından dolayı oluşturulmuş ise, sütunun türü zaten metni olacaktır. i bulduk çözümü sütunu kaldırmak ve aynı bağlanma verilerine sahip olan bir "DataGridViewCheckBoxCell" ile değiştirmektir.

            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);
Cevap 15/07/2019 saat 17:25
kaynak kullanıcı

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