2009-03-25 2 views
5

У меня DataGridView привязаны к datatable, у меня есть флажки к тому же.Программный цикл через DatagridView и флажки checkbox

Я хочу перейти или пропустить через datagridview и отметить эти флажки, Ниже приведен синтаксис, который я использую.

foreach(DataGridViewRow dr in dgvColumns.Rows) 
{ 
    DataGridViewCheckBoxCell checkCell = 
     (DataGridViewCheckBoxCell)dr.Cells["CheckBoxes"]; 
    checkCell.Value=1; 
    //Also tried checkCell.Selected=true; 
    //Nothing seems to have worked.! 
} 
+0

Является ли флажок связан с любыми полями в формате datatable? Может ли это быть полем шаблона ?. Если вы разместите свою разметку, она может быть более четкой. – Macros

+0

. Флажок не связан ни с одним из полей, но на основании некоторого значения мне нужно проверить эти значения на datagrid. – 2009-03-25 11:15:18

ответ

2

Если он привязан к DataTable, вы можете не работать на модели (таблица) вместо этого? DataGridView является видом ...

Попробуйте выполнить цикл по строкам таблицы, установив значения. Например (ниже) - обратите внимание, что я не обновлять DataGridView - только DataTable:

using System; 
using System.Data; 
using System.Windows.Forms; 

static class Program 
{ 
    [STAThread] 
    static void Main() 
    { 
     DataTable table = new DataTable(); 
     table.Columns.Add("Name", typeof(string)); 
     table.Columns.Add("Selected", typeof(bool)); 
     table.Rows.Add("Fred", false); 
     table.Rows.Add("Jo", false); 
     table.Rows.Add("Andy", true); 

     Button btn = new Button(); 
     btn.Text = "Select all"; 
     btn.Dock = DockStyle.Bottom; 
     btn.Click += delegate 
     { 
      foreach (DataRow row in table.Rows) 
      { 
       row["Selected"] = true; 
      } 
     }; 

     DataGridView grid = new DataGridView(); 
     grid.Dock = DockStyle.Fill; 
     grid.DataSource = table; 

     Form form = new Form(); 
     form.Controls.Add(grid); 
     form.Controls.Add(btn); 
     Application.Run(form); 
    } 
} 
+0

Мне жаль. Я не понимаю, как я могу работать с модель? – 2009-03-25 11:16:11

+0

Спасибо Marc за ваш код, возможно ли мне выбрать значение из поля со списком, которое находится в datagridview? – 2009-03-25 13:08:00

+0

Если это привязано к данным, то изменение значения * bound * должно также исправить это. –

1

Что-то вдоль линий:

foreach(DataGridViewRow dgvr in dgvColumns.Rows) 
{ 
    // Get the underlying datarow 
    DataRow dr = ((DataRowView)dgvr.DataBoundItem).Row; 

    // Update the appropriate column in the data row. 
    // Assuming this is your column name in your 
    // underlying data table 
    dr["CheckBoxes"] = 1; 
} 
+0

((DataGridRowView) dgvr.DataBoundItem) .Row Row нет свойства типа te row? – 2009-03-25 11:53:33

+0

Извините, актерский состав был неправильным. Я внесла поправки в код выше. –

+0

У меня также есть comboBox в datagridView, а также хотите установить его на какое-то значение? Как это делается? – 2009-03-25 12:30:38

11

Следующие работал для меня, он проверил флажков отлично :)

foreach (DataGridViewRow row in dgvDataGridView.Rows) 
{ 
    ((DataGridViewCheckBoxCell)row.Cells[0]).Value = true; 
} 
1

строка, которая выбирается его значение не получить передается в основной источник данных, так что не спасутся. источник данных Datatable. Его проблема datagridview.

0
using System.Collections.Generic; 
using System.Windows.Forms; 

namespace FindTheCheckedBoxes 
{ 
    public partial class Form1 : Form 
    { 
     List<TestObject> list = new List<TestObject>(); 

     List<int> positionId = new List<int>(); 

     public Form1() 
     { 
      InitializeComponent(); 
      PopulateDataGrid(); 

      foreach (DataGridViewRow row in dataGridView1.Rows) 
      { 
       if ((bool)row.Cells[0].Value == true) 
        positionId.Add((int)row.Cells[1].Value); 
      } 

      // sets the window title to the columns found ... 
      this.Text = string.Join(", ", positionId); 
     } 
     void PopulateDataGrid() 
     { 
      list.Add(new TestObject { tick = false, LineNum = 1 }); 
      list.Add(new TestObject { tick = true, LineNum = 2 }); 
      list.Add(new TestObject { tick = false, LineNum = 3 }); 
      list.Add(new TestObject { tick = true, LineNum = 4 }); 

      dataGridView1.DataSource = list; 
     } 
    } 
    class TestObject 
    { 
     public bool tick { get; set; } 
     public int LineNum { get; set; } 
    } 
} 

Это похоже на то, что вам нужно. Я новичок во всем этом, так жаль, если я ответил неправильно. Просто пытаюсь помочь.

Смежные вопросы