2013-10-08 6 views
0

Я пытаюсь передать выбранную строку из datagridview1 (form1) в datagridview1 (форма 4), и это мой список кодов .. но я получаю ошибку. Поскольку мои навыки программирования не очень хорошо, подробно объясните, если вы можете прояснить проблему ... спасибо.Лучший метод перегрузки match .... C# databounditem

 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

Подсказка: вы пытаетесь сохранить что-то в списке 'string', который не является строкой. Возможно, попробуйте лить 'DataBoundItem' в строку? –

+0

@SimonWhitehead и как это сделать? извините, я довольно новичок в программировании ... у вас есть сайт, который, возможно, я мог бы сослаться? благодаря.. – user2837847

ответ

0

Вам нужно либо изменить тип вашего списка объектов, или преобразовать объект в строку (с помощью «dr.DataBoundItem как строка»). SendingList - это список строк, поэтому вы не можете добавить к нему объект, не конвертируя его в первую очередь.

Чтобы преобразовать объект в строку (предполагается, что это строка, которая была превращена в объект):

sendingList.Add(dr.DataBoundItem as string); 
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>. Вы также можете использовать List<object>, однако предпочтительно, чтобы объекты были strongly typed.

Смежные вопросы