Я хочу сгруппировать строки с повторяющимися значениями в определенном столбце таблицы данных в поле со списком и отобразить их в DataGridView.
Однако при добавлении/удалении строк для настроенного таким образом представления сетки данных также требовалась функция удаления из связанной таблицы данных, а при выборе поля со списком возникала необходимость получить значение выбранной строки среди перекрывающихся строк.но когда я попытался создать функцию, возникла ошибка, в которой говорилось, что Combobox не может быть создан в связанном представлении, поэтому я не смог его создать. В представлении, привязанном к Datatable, строки с повторяющимися значениями определенного столбца (в примере — значение Столбца контекста) группируются в поле со списком (в примере — внутри «стандартного» столбца), а затем когда выбрано значение в поле со списком. Как выбрать значение строки, содержащей это значение?
private void TEST_PopulateDataGridView()
{
try
{
dgv_target.DataSource = null;
if (!dt_target.Rows.Count>1)
{
dgv_target.Columns.Clear();
foreach (DataColumn _column in dt_target.Columns)
{
dgv_calculateCBS.Columns.Add(_column.ColumnName, _column.ColumnName);
}
// find duplidate row in "Context"column
var _groupedRows = dt_target.AsEnumerable()
.GroupBy(row => row["Context"].ToString())
.ToList();
foreach (var _group in _groupedRows)
{
DataRow _firstRow = _group.First();
DataGridViewRow _newRow = new DataGridViewRow();
_newRow.CreateCells(dgv_target);
if (_group.Count() > 1) //if exist duplicate
{
foreach (DataColumn column in dgv_target.Columns)
{
//make combobox cell in "standard" column
if (column.ColumnName == "standard")
{
DataGridViewComboBoxCell comboBoxCell = new DataGridViewComboBoxCell();
var distinctValues = _group.Select(row => row[column.ColumnName].ToString()).ToArray();
comboBoxCell.Items.AddRange(distinctValues);
comboBoxCell.Value = distinctValues.First();
_newRow.Cells[dt_target.Columns.IndexOf(column)] = comboBoxCell;
}
else
{ _newRow.Cells[dt_target.Columns.IndexOf(column)].Value = firstRow[column]; }
}
_newRow.DefaultCellStyle.BackColor = System.Drawing.Color.PaleVioletRed;
}
//not duplicate row
else
{
foreach (DataColumn column in dt_totalCBSSum.Columns)
{
_newRow.Cells[dt_totalCBSSum.Columns.IndexOf(column)].Value = firstRow[column];
}
}
dgv_target.Rows.Add(_newRow);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Подробнее здесь: https://stackoverflow.com/questions/788 ... y-combobox
Как сгруппировать строку с повторяющимся значением в определенном столбце с помощью Combobox? ⇐ C#
Место общения программистов C#
1722830583
Anonymous
Я хочу сгруппировать строки с повторяющимися значениями в определенном столбце таблицы данных в поле со списком и отобразить их в DataGridView.
Однако при добавлении/удалении строк для настроенного таким образом представления сетки данных также требовалась функция удаления из связанной таблицы данных, а при выборе поля со списком возникала необходимость получить значение выбранной строки среди перекрывающихся строк.но когда я попытался создать функцию, возникла ошибка, в которой говорилось, что Combobox не может быть создан в связанном представлении, поэтому я не смог его создать. В представлении, привязанном к Datatable, строки с повторяющимися значениями определенного столбца (в примере — значение Столбца контекста) группируются в поле со списком (в примере — внутри «стандартного» столбца), а затем когда выбрано значение в поле со списком. Как выбрать значение строки, содержащей это значение?
private void TEST_PopulateDataGridView()
{
try
{
dgv_target.DataSource = null;
if (!dt_target.Rows.Count>1)
{
dgv_target.Columns.Clear();
foreach (DataColumn _column in dt_target.Columns)
{
dgv_calculateCBS.Columns.Add(_column.ColumnName, _column.ColumnName);
}
// find duplidate row in "Context"column
var _groupedRows = dt_target.AsEnumerable()
.GroupBy(row => row["Context"].ToString())
.ToList();
foreach (var _group in _groupedRows)
{
DataRow _firstRow = _group.First();
DataGridViewRow _newRow = new DataGridViewRow();
_newRow.CreateCells(dgv_target);
if (_group.Count() > 1) //if exist duplicate
{
foreach (DataColumn column in dgv_target.Columns)
{
//make combobox cell in "standard" column
if (column.ColumnName == "standard")
{
DataGridViewComboBoxCell comboBoxCell = new DataGridViewComboBoxCell();
var distinctValues = _group.Select(row => row[column.ColumnName].ToString()).ToArray();
comboBoxCell.Items.AddRange(distinctValues);
comboBoxCell.Value = distinctValues.First();
_newRow.Cells[dt_target.Columns.IndexOf(column)] = comboBoxCell;
}
else
{ _newRow.Cells[dt_target.Columns.IndexOf(column)].Value = firstRow[column]; }
}
_newRow.DefaultCellStyle.BackColor = System.Drawing.Color.PaleVioletRed;
}
//not duplicate row
else
{
foreach (DataColumn column in dt_totalCBSSum.Columns)
{
_newRow.Cells[dt_totalCBSSum.Columns.IndexOf(column)].Value = firstRow[column];
}
}
dgv_target.Rows.Add(_newRow);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78832699/how-to-group-row-with-duplicate-value-in-specific-column-by-combobox[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия