Есть кнопка, которая отправляет индекс выбранной строки 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 и при выборе будет показана не одна строка, а те, которые были выбраны. Постарался максимально понятно объяснить идею.
Спасибо за помощь.
Несколько значений можно объединить в одну строку. В примере это делается методом 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; }
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Имеется код, но он выводит только последнюю строку
как можно с помощью C# сделать отдельные символы в строке консоли цветными?
Неожиданно пропали всплывающие подсказки на языке XAML, в том же проекте на C# они работаютЗаходил в настройки - в С# IntelliSense включен, в XAML просто...
Хочу повторить некий "Select(); - Deselect();", как показано на скриншоте