Есть следующий код:
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < dataGridView1.Columns.Count; i++)//Прохожу по таблице в поиске выделенных ячеек
{
for (int j = 0; j < dataGridView1.Rows.Count; j++)
{
if (dataGridView1[i, j].Selected == true)
{
list2.AddLast(dataGridView1[i, j]);
}
}
}
foreach (DataGridViewCell cell in list2)//Меняю значения на ок
{
cell.Value = "ok";
}
dataGridView1.CurrentCell = null;
dataGridView1.Refresh();
}
По нажатию на кнопку, я прохожу по все DataGridView в поиске ячеек, чей Selected == true. После добавляю их в LinketList list2. После, через foreach по коллекции и меняю value на "ок" Проблема в том, что если не сортировать DataGridView по нажатию на заголовок, то все выделенные ячейки меняют свое значение. Но, если отсортировать DataGridView по нажатию на заголовок столбца, значения ячеек перестают корректно меняться. В чем может быть проблема?
P.S.: Так же пробовал получать коллекцию ячеек, через SelectedCells и через DataTable.Selcted() получать строку по первичному ключу выделенной ячейки и менять значение в этой строке на "ОК". И это, тоже не сработало!
К тому же ,что в первом, что во втором случае иногда происходит System.ArgumentOutOfRangeException по индексу. По какому индексу и как можно выйти за предел индекса при коллекции существующих ячеек, я не понимаю.
dt = (DataTable)dataGridView1.DataSource;
foreach (DataGridViewCell cell in dataGridView1.SelectedCells)
{
DataRow[] dw = dt.Select("Айди = " + dataGridView1[0, cell.RowIndex].Value.ToString());
dt.Rows[cell.RowIndex][dataGridView1.Columns[cell.ColumnIndex].Name.ToString()] = "OK";
}
сделай так
static public class DataGridExtension
{
static public List<DataGridViewCell> Cells(this DataGridView view)
{
var rows = ((IEnumerable<DataGridViewRow>)view.Rows);
var result = new List<DataGridViewCell>();
rows.ToList().ForEach(row => result.AddRange((IEnumerable<DataGridViewCell>)row.Cells));
return result;
}
static public void SetCellValue(this DataGridView grid, Func<DataGridViewCell, bool> condition, object value)
{
grid.Cells().ForEach(v => { if (condition(v)) v.Value = value; });
}
}
private void button1_Click(object sender, EventArgs e)
{
dataGridView1.SetCellValue(c => c.Selected, "ОК");
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Всем привет, Сразу к делу : Моя задача вращать картинку в pictureBox (есть ракета, она должна плавно отклоняться на угол от -30° до 30° в зависимости...
Моя цель - обработать событие загрузки приложения, при этом применяя паттерн MVVM
Есть приложение написанное на C# Xamarin (Android, IOS)Необходимо показывать изображение которое распологается на сайте