2016-02-01 3 views
0

Я пытаюсь скопировать все выбранные строки из одного datagrid в другой. Вот то, что я пытался сделать до сих пор:Копирование всех строк из одного DataGrid в другое

private void btnFeedbackSelectSupplier_Click(object sender, RoutedEventArgs e) 
{ 
    dgFeedbackAddCost.SelectAll(); 

    IList list = dgFeedbackAddCost.SelectedItems as IList; 
    IEnumerable<ViewQuoteItemList> items = list.Cast<ViewQuoteItemList>(); 

    //Example of how I want to access the data from the first datagrid and add it to 
    //the second one. 
    var item = (new ViewQuoteItemList 
    { 
     Item = items.Item, 
     Supplier = items.Cost 
    }); 
    //Example 

    dgFeedbackSelectSupplier.Items.Add(item); 
} 

Мой вопрос здесь:

var item = (new ViewQuoteItemList 
{ 
    Item = items.Item, 
    Supplier = items.Cost 
}); 

И я получаю ошибку:

'System.Collections.Generic.IEnumerable' does not contain a definition for 'Item' and no extension method 'Item' accepting a first argument of type 'System.Collections.Generic.IEnumerable' could be found (are you missing a using directive or an assembly reference?)

Теперь я знаю, Я делаю это неправильно, просто я не знаю, как еще я могу показать вам, чего я хочу достичь с помощью фрагментов кода.

Итак, мой вопрос: как я смогу получить доступ к этим данным из состава items и добавить его в мой ViewQuoteItemList для моего второго datagrid?

+0

То, что вы хотите, это элемент в '' деталей (а не 'items.Item' что-то вроде' пунктов [0] .Item', я имею в виду?) Не Это? Как вы хотите точно получить 'item'? из 'items [0]'? 'пунктов [1]'? 'пунктов [2]'? каждый 'элемент' в' items'? – Ian

+0

Почему бы не сохранить первый datagridview в datatable, а затем переименовать эту таблицу в качестве источника для второго gridview? – Takarii

+0

Спасибо за комментарий Ян. Да, я хочу получить каждый элемент в Items. Может быть, заявление? – CareTaker22

ответ

2

Вы можете получить все новые элементы с помощью LINQ:

var items2 = (from i in items 
      let a = new ViewQuoteItemList { Item = i.Item, Supplier = i.Cost } 
      select a).ToList(); 

foreach(var item in items2) 
    dgFeedbackSelectSupplier.Items.Add(item); 
+0

@ CareTaker22 рад это узнать! ;) надеюсь, что это может быть полезно в вашем обучении LINQ тоже .. – Ian

+0

Привет, Ян. Мне еще раз. Видя, как вы помогли мне с этой проблемой, и хорошо на C#. Мне было интересно, есть ли у вас время посмотреть на другой вопрос, который я сделал некоторое время назад. Пока никто не ответил или не прокомментировал мой вопрос, и мне очень нужна помощь. [Ссылка] (http://stackoverflow.com/questions/35138374/adding-data-only-to-a-specific-column-in-a-datagrid) на мой вопрос, если вы хотите его просмотреть. Я действительно надеюсь, что вы можете помочь или просто дать мне небольшой совет :) – CareTaker22

+0

@ CareTaker22 Кажется, мы живем в разных часовых поясах здесь ... Хорошо, я пойду и проверю. – Ian

1

Это будет удовлетворять ваши потребности только добавить выбранные строки в DataTable. Затем вы можете объединить 2 datatables, если хотите просто добавить их вместе, а затем восстановить исходный код во вторую сетку.

DataTable dt = new DataTable(); 
foreach (DataGridViewColumn column in dataGridView1.Columns) 
    dt.Columns.Add(column.Name, column.CellType); 
for (int i = 0; i < dataGridView1.SelectedRows.Count; i++) 
{ 
    dt.Rows.Add(); 
    for (int j = 0; j < dataGridView1.Columns.Count; j++) 
    { 
     dt.Rows[i][j] = dataGridView1.SelectedRows[i].Cells[j].Value; 

    } 
} 

Ссылка Here

+0

Спасибо за ответ Такарий! :) Ответ Яна был проще и на данный момент проделал свою работу. Спасибо за усилия человека. Я буду держать ваш ответ на более поздние вопросы, если я столкнусь с любым;) – CareTaker22

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