Как объединить определенные строки в datagridview? - PullRequest
0 голосов
/ 10 июля 2019

Я создал элемент управления DataGridView, чтобы перечислить пару вещей. Тем не менее, я хочу соединить определенные строки (НЕ помещая их все внутри строки) на основе условия из textBox.

Спасибо!

Вот код:

DataTable table = new DataTable();

        private void Form1_Load(object sender, EventArgs e)
        {
            // populate dgv from datatable

            // add columns
            table.Columns.Add("Number", typeof(int));
            table.Columns.Add("Food", typeof(string));

            // add rows
            table.Rows.Add(1, "BBQ");
            table.Rows.Add(2, "Pear");
            table.Rows.Add(3, "Eggs");
            table.Rows.Add(4, "Banana");
            table.Rows.Add(5, "Noodle");
            table.Rows.Add(6, "Orange");
            table.Rows.Add(7, "Mango");
            table.Rows.Add(8, "Beef");

            dataGridView1.DataSource = table;
        }

        private void Button1_Click(object sender, EventArgs e)
        {
            if (textBox1.Text == "Fruit" )
            {

            }
        }

Например, когда я набираю «Фрукты» в текстовом поле. Все строки, которые содержат фрукт, будут автоматически совмещаться друг с другом, начиная с первого ряда следующим образом:

  1. груша
  2. Бананы
  3. Orange
  4. Манго

То же самое относится и к остальным строкам, которые содержат тип мяса, когда в текстовом поле набирается слово «Мясо».

1 Ответ

0 голосов
/ 10 июля 2019

Вы можете использовать DataView.RowFilter свойство для фильтрации строк. Но вам нужен какой-то столбец на основе того, что вы можете фильтровать.

В вашем случае у вас не было колонки с фруктами, мясом, поэтому я добавляю еще одну колонку типа еды. (Если вы не хотите показывать этот столбец, мы можем его скрыть).

public partial class Form1 : Form
    {
        DataTable table = new DataTable();
        public Form1()
        {
            InitializeComponent();
            table.Columns.Add("Number", typeof(int));
            table.Columns.Add("Food", typeof(string));
            table.Columns.Add("FoodType", typeof(string));

            // add rows
            table.Rows.Add(1, "BBQ", "Meat");
            table.Rows.Add(2, "Pear","Fruit");
            table.Rows.Add(3, "Eggs", "Eggs");
            table.Rows.Add(4, "Banana", "Fruit");
            table.Rows.Add(5, "Noodle","Veg");
            table.Rows.Add(6, "Orange", "Fruit");
            table.Rows.Add(7, "Mango", "Fruit");
            table.Rows.Add(8, "Beef","Meat");

            dataGridView1.DataSource = table;
           //hide the foodtype column
            this.dataGridView1.Columns["FoodType"].Visible = false;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (textBox1.Text != "")
            {
                DataView dv = new DataView(table, "FoodType= '" + textBox1.Text + "'", "FoodType Desc", DataViewRowState.CurrentRows);

                dataGridView1.DataSource = dv;
            }
            else
                dataGridView1.DataSource = table;
        }
    }

Значение - это фильтр на основе значения текстового поля. Если вы хотите снова все значения, просто очистите текстовое поле и нажмите кнопку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...