0

我正在尝试将选定的行从 datagridview1 (form1) 传递到 datagridview1(form 4),这是我的代码列表..但我收到错误。由于我的编程技能不是很好,如果您能澄清问题,请详细解释...谢谢。

        if (tableListBox.SelectedIndex == 2)
        {
            List<string> sendingList = new List<string>();
            foreach (DataGridViewRow dr in dataGridView1.SelectedRows)
            {
                int counter = 0;
                sendingList.Add(dr.DataBoundItem);// The best overload method match for 'System.Collections.Generic.List<string>.Add(string)' has some invalid argument

            }
            Form4 form4 = new Form4(sendingList);
            form4.Show();

        }
4

2 回答 2

0

您需要将列表的类型更改为对象,或将对象转换为字符串(使用“dr.DataBoundItem 作为字符串”)。SendingList 是一个字符串列表,所以如果不先转换它就不能向其中添加对象。

要将对象转换为字符串(假设它是转换为对象的字符串):

sendingList.Add(dr.DataBoundItem as string);
于 2013-10-08T02:47:43.283 回答
0

您收到该错误的原因是您的类型不匹配。如果您查看DataGridViewRow.DataBoundItem您可以看到它的定义如下。

public Object DataBoundItem { get; }

这意味着返回类型是Object. 该错误是因为该List<T>.Add()方法期望参数在您的情况下为 T 类型List<string>.Add(string)。该列表应该是 DataBoundItem 可以转换为的类型。查看帮助页面中的示例...

void invoiceButton_Click(object sender, EventArgs e)
{
    foreach (DataGridViewRow row in this.dataGridView1.SelectedRows)
    {
        Customer cust = row.DataBoundItem as Customer;
        if (cust != null)
        {
            cust.SendInvoice();
        }
    }
}

DataBoundItem 被转换为 Customer 对象。如果你想将它们捕获到一个列表中,它将是一个List<Customer>. 您也可以使用 aList<object>但是最好是对象是强类型的。

于 2013-10-08T03:00:03.083 回答