Это как ответ на код, упомянутый здесь, который частично работает для меня, но не так, как хотелось бы, и, к сожалению, в WPF я не могу справиться с этой проблемой и найти решение.Поскольку я не смог найти функциональное решение, я задаю этот вопрос.
Получить выбранный элемент строки в DataGrid WPF
Пытался достичь результата
Ответить
ответил 19 апреля '11 в22:01 от Bahaa Salaheldin
был наиболее полезен
Но что происходит, когда я прокручиваю вниз, выбранная строка постоянно появляется, я думаю, из-за подхода «ContainerFromItem».Можно ли программно изменить фон DataGrid?- только в коде C #?Я попытался немного поиграть с ... выбранным индексом, и это не так просто, как в WindowsForms.Поэтому я попытался выяснить, как выполнить выделение.Я использую: DataTable в DataObject, который связан элементами DataGrid. Soruce - это dataObject.DataTable. Я знаю, что должен выполнить .Background = Brushes./ Выбранный элемент / SelectedItems и свойство Background Спасибо.
11/06/19 Дополнительная информация добавлена:
Здесь я публикую пример кода, но этот код работаетдля оконных форм я думал, что смогу сделать что-то подобное.
foreach (DataGridViewRow row in dgvNetlist.Rows)
{
if (row.Cells[2].Value.ToString().Contains(Messages.SingleConnection))
row.DefaultCellStyle.BackColor = databaseColor[0]; //error color
else if (row.Cells[2].Value.ToString().Contains(Messages.MissingTP))
row.DefaultCellStyle.BackColor = databaseColor[1];
else if (row.Cells[2].Value.ToString().Contains(Messages.MissingConnection))//if message cell contains missing connections
row.DefaultCellStyle.BackColor = databaseColor[2];
else if (row.Cells[2].Value.ToString().Contains(Messages.MultipleTPs) && cbHideMultipleTPs.Checked == false) //if message cell contains multiple TPs
row.DefaultCellStyle.BackColor = databaseColor[3];
else if (row.Cells[2].Value.ToString().Contains(Messages.EmptyNet)) //if message cell contains Empty net
row.DefaultCellStyle.BackColor = databaseColor[0];
else
row.DefaultCellStyle.BackColor = databaseColor[4]; //OK color
if (row.Cells[4].Value.ToString().Equals("True")) //if row is marked -> marked color
row.DefaultCellStyle.BackColor = databaseColor[5];
i++;
}
Но, например, по собственным правилам пользователь должен «сохранить» какую-то строку, он хочет выделить строку.То, что я хочу сделать, состоит в следующем:
1) Получить идентификатор элемента из выбранной строки ... Идентификатор элемента Я имею в виду исходный идентификатор в таблице, например, номер идентификатора 950
2) выполнить действие выделениянапримерфон для разного цвета.3) сохранить идентификатор в настройках пользователя, потому что у каждого пользователя могут быть выделены разные строки
4) при запуске другого приложения используйте некоторый цикл для поиска сохраненных строк (не имеет значения, есть ли в базе данных больше или меньше элементов)) и выделите строки - не имеет значения, как они упорядочены - выделение зависит от идентификатора элемента ...
Я думал, что это как-то возможно, пока я могу получить идентификатор из таблицы данных-> выбранный элемент
но я не нашел способа сделать это, как в приведенном выше коде.
Надеюсь, это прояснит ситуацию