Приложение C # .net для Windows: выделите несколько строк в представлении данных и передайте все выбранные строки в другое представление данных в другой форме. - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть datagridview в форме Windows, скажем, datagridview1 с фиксированным столбцом (SAY ID, NAME, AGE) и в его первом столбце (т.е. ID) на cellBeginEdit, я открываю другую форму, которая также содержит datagridview, который загружается сданные, скажем, это datagridview2, и у него также есть много столбцов, скажем ID, JOB, NAME, AGE, TYPE.

Я хочу выбрать несколько строк в datagridview2 и при вводе передать все выбранные строки из datagridview2 в datagridview1 вконкретные столбцы.

Я пробовал много вещей, но ни одна не работала.вот мой код

из 1-й формы - datagridview1 CellBeginEdit:

private void dataGridView1_CellBeginEdit (отправитель объекта, DataGridViewCellCancelEventArgs e)

    {

        dr = dataGridView1.Rows[e.RowIndex];

        if (e.ColumnIndex == dr.Cells["grid_bill"].ColumnIndex)

        {

            if (dr.Cells["grid_module"].Value.ToString().Equals("SALES"))

            {

                var form = new frmSalesInvoiceMaster(); //i am calling frmSalesInvoiceMaster where on load i have provided datatable as a datasource to datagridview

                form.ShowDialog();

            }

        }

    }

view моего изображенияон содержит 2 таблицы данных И оба находятся в разных формах

форма 2, т.е. frmSalesInvoiceMaster

вот что я хочу, пользователь может выбрать несколько строк из таблицы данных формы 2, и я хочу получитьнесколько выбранных строк из таблицы данных вида 2, скрыть эту форму 2 и показать все выбранные строки формы 2 в таблице данных вида 1 в определенном столбце.

1 Ответ

0 голосов
/ 18 декабря 2018

Предположим, у вас есть событие dataGridView1_CellBeginEdit в первой форме:

private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{
    if(e.ColumnIndex == 0)
    {
        Form2 f = new Form2();
        var result = f.ShowDialog();
        if(result == DialogResult.OK)
        {
            List<Person> selection = new List<Person>();
            f.GetSelection(selection);
            BindingSource bs = new BindingSource();
            bs.DataSource = selection;
            dataGridView1.DataSource = bs;
        }
        f.Dispose();

    }
}

Теперь сначала я проверяю, является ли отредактированный столбец первым (ID) - вам не нужно этого делать, если вы этого не сделаетеcare.

Далее я создаю форму2 и показываю ее модально.Когда пользователь нажимает кнопку «ОК» на форме form2, он возвращает DialogResult.OK.

Далее я создаю список записей, которые будут снабжены выбором из form2 -> GetSelection.

Когда у меня есть выборЯ могу заполнить dataGridView этим.Здесь я использую BindingSource - вы можете сделать что-то еще.

А теперь form2:

Сначала я загружаю некоторые данные:

void LoadData()
{
    List<Person> data = new List<Person>();
    Person p = new Person { Id = 1, Age = 20, Job = "Consultant", Name = "John" };
    Person p2 = new Person { Id = 2, Age = 22, Job = "Programmer", Name = "Steven" };
    Person p3 = new Person { Id = 3, Age = 22, Job = "Manager", Name = "Alice" };
    Person p4 = new Person { Id = 4, Age = 30, Job = "Analytic", Name = "Mark" };
    Person p5 = new Person { Id = 5, Age = 32, Job = "Analytic", Name = "Gregory" };
    Person p6 = new Person { Id = 6, Age = 32, Job = "Tester", Name = "Hugh" };

    data.Add(p);
    data.Add(p2);
    data.Add(p3);
    data.Add(p4);
    data.Add(p5);
    data.Add(p6);

    bs = new BindingSource();
    bs.DataSource = data;
    dataGridView1.DataSource = bs;
}

И самый интересный методGetSelection, который действительно прост:

public void GetSelection(List<Person> result)
{
    var rows = dataGridView1.SelectedRows;
    for(int i = 0; i < rows.Count; i++)
    {
        Person p = rows[i].DataBoundItem as Person;
        if (p != null)
            result.Add(p);
    }
}

Конечно, не забудьте добавить OKButton, который установит DialogResult в OK.

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