Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# net Windows应用程序:在datagridview中选择多行,并将所有选定行以另一种形式传递给另一个datagridview_C#_Windows_Datagridview - Fatal编程技术网

C# net Windows应用程序:在datagridview中选择多行,并将所有选定行以另一种形式传递给另一个datagridview

C# net Windows应用程序:在datagridview中选择多行,并将所有选定行以另一种形式传递给另一个datagridview,c#,windows,datagridview,C#,Windows,Datagridview,我在Windows窗体中有一个datagridview,假设它是datagridview1,有固定的列,比如ID、名称、年龄,在它的第一列,即cellBeginEdit上的ID中,我打开了另一个窗体,其中也包含datagridview,它加载了数据,比如datagridview2,它还有许多列,比如ID、作业、名称、年龄、类型 我想在datagridview2中选择多行,并在输入时将所有选定行从datagridview2传递到特定列中的datagridview1 我尝试了很多事情,但都没有成功。

我在Windows窗体中有一个datagridview,假设它是datagridview1,有固定的列,比如ID、名称、年龄,在它的第一列,即cellBeginEdit上的ID中,我打开了另一个窗体,其中也包含datagridview,它加载了数据,比如datagridview2,它还有许多列,比如ID、作业、名称、年龄、类型

我想在datagridview2中选择多行,并在输入时将所有选定行从datagridview2传递到特定列中的datagridview1

我尝试了很多事情,但都没有成功。 这是我的密码

从第一个表单-datagridview1 CellBeginEdit:

私有void dataGridView1_CellBeginEditobject发送方, 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();

            }

        }

    }
表格2,即frmSalesInvoiceMaster


在这里,我想要的是,用户可以从表单2的datagridview中选择多行,我想要从表单2 datagridview中获取多行所选行并隐藏此表单2,并在特定列中显示表单1的datagridview1中表单2的所有所选行。

假设您在表单1上有事件datagridview1\u 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——如果您不在乎,就不必这样做

接下来,我创建form2并以模式显示它。当用户单击form2上的OK按钮时,它返回DialogResult.OK

接下来,我创建一个记录列表,该列表将提供来自form2->GetSelection的选择

当我有选择时,我可以用它填充dataGridView。这里我使用的是BindingSource—您可以做其他事情

现在是表格2:

首先,我加载一些数据:

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);
    }
}

当然,不要忘记添加OK按钮,该按钮将DialogResult设置为OK。

您好,如果您在提问时发布设置的最低代码版本,这会有所帮助。没有任何代码示例,我只能为您提供简单的答案和一般解决方案:1。获取所选行。2.将其存储在诸如Datatable之类的集合类型中。3.使用正确的setter代码在父窗体上创建公共属性。4.设置子窗体中父属性的值。支持提示:小写手机书写、紧急乞讨、请帮助乞讨和txtspk可能被否决。这不是聊天室,志愿者们在业余时间都在这里。请尽力以可读和清晰的方式提出问题,并意识到您的问题并不比这里的任何其他问题更重要。请阅读-总结是,这不是向志愿者讲话的理想方式,可能会对获得答案产生反作用。请不要将此添加到您的问题中。我已经提供了代码示例。当我在另一个表单中添加ok按钮时,它显示了一个错误,即表单不应该可见,应该先关闭。我通过调用close来关闭窗体;但同样的错误你做了一些非常错误的事情。您是否像我写的那样使用ShowDialog打开表单?