Я нуждаюсь в преобразовании текущего объекта DataGrid Item Soucrce со всем содержимым в новый DataTable.Преобразование DataGrid.ItemSource в DataTable
Вот мое кодирование, где я вставить все мои информацию в dgFeedbackSelectSupplier
«s ItemSource
private void btnFeedbackSelectSupplier_Click(object sender, RoutedEventArgs e)
{
DataGridTemplateColumn columnFeedbackSupplier = new DataGridTemplateColumn();
columnFeedbackSupplier.Header = "Supplier";
columnFeedbackSupplier.CanUserReorder = true;
columnFeedbackSupplier.CanUserResize = true;
columnFeedbackSupplier.IsReadOnly = false;
var stackPanel = new FrameworkElementFactory(typeof(StackPanel));
stackPanel.SetValue(StackPanel.OrientationProperty, Orientation.Horizontal);
DataTemplate cellTemplate = new DataTemplate();
FrameworkElementFactory factoryCheck = new FrameworkElementFactory(typeof(CheckBox));
Binding bindCheck = new Binding("TrueFalse");
bindCheck.Mode = BindingMode.TwoWay;
factoryCheck.SetValue(CheckBox.IsCheckedProperty, bindCheck);
stackPanel.AppendChild(factoryCheck);
FrameworkElementFactory factoryText = new FrameworkElementFactory(typeof(TextBox));
Binding bindText = new Binding("Supplier");
bindText.Mode = BindingMode.TwoWay;
factoryText.SetValue(TextBox.TextProperty, bindText);
stackPanel.AppendChild(factoryText);
cellTemplate.VisualTree = stackPanel;
columnFeedbackSupplier.CellTemplate = cellTemplate;
DataGridTextColumn columnFeedbackSupplierItem = new DataGridTextColumn();
columnFeedbackSupplier.Header = (cmbFeedbackSelectSupplier.SelectedItem as DisplayItems).Name;
dgFeedbackAddCost.SelectAll();
IList list = dgFeedbackAddCost.SelectedItems as IList;
IEnumerable<ViewQuoteItemList> items = list.Cast<ViewQuoteItemList>();
var collection = (from i in items
let a = new ViewQuoteItemList { Item = i.Item, Supplier = 25, TrueFalse = false } //Remove Supplier(it's for test only)
select a).ToList();
dgFeedbackSelectSupplier.Columns.Add(columnFeedbackSupplier);
dgFeedbackSelectSupplier.ItemsSource = collection;
lblFeedbackRemoveCompany.Content = collection.ToList().Sum(x => x.Supplier);
}
В следующем случае, я пытаюсь преобразовать эту ItemSource в новый DataTable, как это:
private void btnFeedbackGetTotals_Click(object sender, RoutedEventArgs e)
{
DataTable dt = new DataTable();
dt = ((DataView)dgFeedbackSelectSupplier.ItemsSource).ToTable(); //Error here
var sum = 0;
foreach (DataRow dr in dt.Rows)
{
foreach (DataColumn dc in dt.Columns)
{
sum += (int)dr[dc];
}
}
}
Но я получаю следующее сообщение об ошибке, когда я запускаю выше метод:
Unabl e для создания объекта типа 'System.Collections.Generic.List`1 [MKCWorkflowApplication.ViewQuoteItemList]' для ввода 'System.Data.DataView'.
У меня нет ни малейшего понятия, почему это происходит, поскольку я думал, что источник источника данных datagrid может быть просто преобразован в новый datatable. Есть ли способ исправить это?
EDIT:
Мой класс 'ViewQuoteItemList'
public class ViewQuoteItemList
{
public string CustomerRFQ { get; set; }
public int QuoteId { get; set; }
public int Id { get; set; }
public string Item { get; set; }
public string Material { get; set; }
public string Description { get; set; }
public string AdditionalInformation { get; set; }
public int Quantity { get; set; }
public string Cost { get; set; }
public decimal Supplier { get; set; }
public bool TrueFalse { get; set; }
public string CheckBoxColumn
{
get { return string.Format("{0} {1}", Supplier, TrueFalse); }
}
}
Почему вы хотите преобразовать строго типизированный «List» в свободно набранный «DataTable»? –
Спасибо за комментарий Тим. Я не могу понять, как получить общее значение каждого отдельного столбца, добавленного в DataGrid, поэтому я подумал, что если я преобразую его в DataTable, то я бы более легко мог получить нужные мне значения – CareTaker22