Несколько значений в одном item combobox

97
01 февраля 2021, 22:00

Есть кнопка, которая отправляет индекс выбранной строки datagridview в combobox другой формы

if (dataGridView1.SelectedRows.Count > 0)
{       
  int selectedIndex = dataGridView1.SelectedRows[0].Index;
  dir.comboBox1.Items.Add(selectedIndex + 1);
}
else MessageBox.Show("Строка не выбрана", "Ошибка"); 

В другой форме происходит фильтрация datagridview при выборе следующим образом

{
    for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
        {       
            dataGridView1.CurrentCell = null;
            dataGridView1.Rows[i].Visible = false;
            for (int c = 0; c < dataGridView1.Columns.Count; c++)
                {
                    if(comboBox1.SelectedItem == null || dataGridView1[c, i+1].RowIndex.ToString() == comboBox1.SelectedItem.ToString())
                        {
                            dataGridView1.Rows[i].Visible = true;
                            break;
                        }
                }     
        } 
}

Вопрос в том, есть ли возможность добавить в один item несколько индексов. К примеру в таблице первой формы будут checkbox, по нажатию кнопки выбранные строки отправляются на вторую форму под item 1 и при выборе будет показана не одна строка, а те, которые были выбраны. Постарался максимально понятно объяснить идею.

Спасибо за помощь.

Answer 1

Несколько значений можно объединить в одну строку. В примере это делается методом string.Join. Они объединяются через запятую.

В методе фильтрации строка разбивается по запятой методом String.Split.

В коде обработчиков событий для краткости опущены проверки.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace WinFormApp1
{
    public partial class Form1 : Form
    {
        DataGridView dataGridView;
        ComboBox comboBox;
        Button buttonAdd;
        Button buttonFilter;
        List<Person> people;
        public Form1()
        {
            try
            {
                Width = 400;
                people = new List<Person> {
                    new Person { Name = "A", Age = 21 },
                    new Person { Name = "B", Age = 22 },
                    new Person { Name = "C", Age = 23 },
                    new Person { Name = "D", Age = 24 },
                    new Person { Name = "E", Age = 25 } };
                dataGridView = new DataGridView { Parent = this, Dock = DockStyle.Top };
                comboBox = new ComboBox { Parent = this, Top = dataGridView.Bottom + 20 };
                buttonAdd = new Button { Parent = this, Top = comboBox.Top, Left = comboBox.Right + 40, Text = "Add" };
                buttonFilter = new Button { Parent = this, Top = buttonAdd.Top, Left = buttonAdd.Right + 40, Text = "Filter" };
                buttonAdd.Click += ButtonAdd_Click;
                buttonFilter.Click += ButtonFilter_Click;
                dataGridView.DataSource = people;
            }
            catch (Exception e) { MessageBox.Show(e.Message); }
        }
        private void ButtonAdd_Click(object sender, EventArgs e)
        {
            var indexes = dataGridView.SelectedRows.OfType<DataGridViewRow>().Select(row => row.Index).ToList();
            var value = string.Join(",", indexes);
            comboBox.Items.Add(value);
        }
        private void ButtonFilter_Click(object sender, EventArgs e)
        {
            var indexes = ((string)comboBox.SelectedItem).Split(',').Select(int.Parse).ToList();
            var filtered = people.Where((p, i) => indexes.Contains(i)).ToList();
            dataGridView.DataSource = filtered;
        }
    }
    class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }
}
READ ALSO
Как вывести все данные из таблицы SQLite в Unity?

Как вывести все данные из таблицы SQLite в Unity?

Имеется код, но он выводит только последнюю строку

96
Цветные символы в строке [дубликат]

Цветные символы в строке [дубликат]

как можно с помощью C# сделать отдельные символы в строке консоли цветными?

99
Пропали всплывающие подсказки в Xaml Forms(VS 2017)

Пропали всплывающие подсказки в Xaml Forms(VS 2017)

Неожиданно пропали всплывающие подсказки на языке XAML, в том же проекте на C# они работаютЗаходил в настройки - в С# IntelliSense включен, в XAML просто...

108
Как организовать подсвечивание 3D объекта с которым происходит контакт?

Как организовать подсвечивание 3D объекта с которым происходит контакт?

Хочу повторить некий "Select(); - Deselect();", как показано на скриншоте

151