Программно перебрать DatagridView и установить флажки
У меня есть 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.!
}
5 ответов
Следующее сработало у меня, оно проверило галочки отлично:)
foreach (DataGridViewRow row in dgvDataGridView.Rows)
{
((DataGridViewCheckBoxCell)row.Cells[0]).Value = true;
}
Если это связано с 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);
}
}
Строка, для которой выбрано ее значение, не передается в базовый источник данных, поэтому не сохраняется. источник данных является датируемым. Его проблема с сеткой.
Что-то вроде:
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;
}
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; }
}
}
Похоже, что он делает то, что вам нужно. Я новичок во всем этом, так что извините, если я ответил неправильно. Просто пытаюсь помочь.