Мой код ниже надеется ответить на вопрос, который позволяет связывать данные из неизвестного количества источников, каждый результат может быть неизвестного размера, а также потенциальное количество столбцов, которые могут быть использованы.Затем медленно формируйте результаты построчно в динамическую коллекцию, которая представляет окончательный макет данных.
По сути, примерно так же, как в ответе BlindMeis, но он разместил код, который был некорректно синтаксически и не выглядел так, как будтобыл проверен перед публикацией.Ниже приведен мой код, который я сейчас использую.
Ниже вы найдете то, что сработало для меня, если у вас есть набор результатов или наборы для начала.
Объявитьтаблица для хранения ваших результатов.
DataTable shapeResultsTable = new DataTable ();
Следующим шагом будет фильтрация некоторых результатов из вызова БД или процедуры, которая приводитВы пытаетесь изменить форму.Что-то вроде:
foreach (DataRow row in whFreeResults.Rows)
{
// filter your results and strip exactly the data you need to represent your column names.
// dump your results into a sample list e.g: 'columnNamesFormatted'
}
Как только у вас будет список имен столбцов, добавьте их в свою таблицу данных, объявленную выше.
foreach (string column in columnNamesFormatted)
{
shapedResultsTable.Columns.Add(column, typeof(string));
}
Затем объявите, создайте экземпляр и заполните список неизвестного размера, потому что ваши результаты имеют размер n или количество n, чтобы сохранить значения строк.
Затем повторите шаги 2 и 3 для каждой строки данных, которую вы хотите отобразить в новой таблице данных с сформированными результатами, более одного для каждой строки, найденной в наборе результатов.
Когда у вас есть несколько коллекций, представляющих каждую строку, которую вы хотите добавить в таблицу данных.Добавьте их в том порядке, в котором вы хотите, чтобы они отображались.
shapeResultsTable.Rows.Add (totalsArray.ToArray ());shapeResultsTable.Rows.Add (branchRowValues.ToArray ());
Наконец, присвойте свой DataTable «свойству DataBinded».
StockResultsTable = shapeResultsTable;
Связанное свойство может выглядеть следующим образом:
private DataTable _stockResultsTable;
public DataTable StockResultsTable
{
get { return _stockResultsTable; }
set
{
_stockResultsTable = value;
OnPropertyChanged("StockResultsTable"); // <--- defo' need this one.
}
}
Наконец, xaml на переднем конце может выглядеть следующим образом:
<DataGrid Height="179"
HorizontalAlignment="Left"
Margin="151,0,0,211"
Name="dgStockInfo"
VerticalAlignment="Bottom"
Width="393"
ItemsSource="{Binding Path = StockResultsTable}" AutoGenerateColumns="True" Padding="0,10" FontSize="14" />
Я не знаю, почему свойство автогенерации столбцов включено, но это работает для меня.
Шаги 1-9 работал для меня, работая с образцом набора данных результатов, возвращаемых запросом или SProc. Приведенные выше шаги кратко описывают то, что я делал при отображении результатов многочисленных запросов, которые мне нужно было выполнить, чтобы получить совершенно разные данные из множества различных SProcs, ноУ них была общая базовая тема, которая позволяла отображать их под общими именами столбцов.
Помните о том, что у вас возникнут проблемы при добавлении строки данных, в которой больше элементов, чемТаблица данныхимеет столбцы.DT, который имеет 6 столбцов, но вы добавляете строку, которая была получена из другого запроса, которая имеет 7 отдельных ячеек данных.Это не сработает, просто добавьте новый столбец, которого еще нет, и попробуйте снова.