最好的重载方法匹配.... c #databounditem

时间:2013-10-08 02:41:50

标签: c# database visual-studio-2010 datagridview

我正在尝试将所选行从datagridview1(form1)传递到datagridview1(表单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();

        }

2 个答案:

答案 0 :(得分:0)

您需要将列表类型更改为对象,或将对象转换为字符串(使用'dr.DataBoundItem as string')。 SendingList是一个字符串列表,因此您无法在不先转换它的情况下向其添加对象。

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

sendingList.Add(dr.DataBoundItem as string);

答案 1 :(得分:0)

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

public Object DataBoundItem { get; }

这意味着返回类型为Object。该错误是因为List<T>.Add()方法期望参数在您的案例List<string>.Add(string)中为T类型。该列表应该是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>。您也可以使用List<object>,但最好是对象为strongly typed