我正在尝试将所选行从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();
}
答案 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。