Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > Визуализация двумерного массива в wpf DataGrid


Автор: spartak1501 20.10.2011, 13:25
Здравствуйте, помогите отбразить матрицу в DataGrid!!! Не получается ее прикрепить...
Это код консоли C#
                
Код

            TableRule table = new TableRule(2);
            int count = table.CountTerms.Length;

            // количество строк и столбцов матрицы
            table.CountTerms[0] = 3;
            table.CountTerms[1] = 4;
 
            int colRow = 1;
            for (int i = 0; i < table.CountTerms.Length; i++)
            colRow *= table.CountTerms[i];
            table.CountRow = colRow;
 
            table.Rule = new int [table.CountRow, table.CountVars];
 
            table.CreateTable(); // метод формирования матрицы
 
            for (int i = 0; i < table.CountRow; i++)
            {
                Console.Write("   {0}   ", i);
 
                for (int j = 0; j < table.CountVars; j++)
                {
                    Console.Write("   {0}", table.Rule[i, j]); // вывод в консоли
                 }
                Console.WriteLine();
            }
 
            Console.ReadLine();

 
Этот код должен использоваться в WPF проекте...
Как привязать матрицу table.Rule[i, j] к wpf DataGrid?

Автор: Gvozdin 20.10.2011, 13:52
А что конкретно не получается?


DataGrid оперирует понятиями строка и столбец.

Преобразуете вашу матрицу к списку строк с данными(List<RuleRow> или даже просто List<int[]>), их количество будет i.

Ставите его в DataGrid.ItemsSource.

Далее для каждой колонки, их будет всего j, создаете DataGridTextColumn и задаете ему Binding = new Binding(String.Format("[{0}]", j)).

Запихиваете эти колонки в DataGrid.Columns.

Примерно так все должно работать.

Автор: spartak1501 25.11.2011, 17:17
Цитата(Gvozdin @ 20.10.2011,  13:52)
Преобразуете вашу матрицу к списку строк с данными(List<RuleRow> или даже просто List<int[]>)

Как это сделать?

Автор: Gvozdin 25.11.2011, 20:05
Ну как обычно.

Проходите циклом по строкам.
Из строки делаете int[].
Все строки складываете в List<int[]>.

Подробнее? smile

Автор: spartak1501 25.11.2011, 21:04
Да, если можно! Особенно с выводом в DataGrid...
Будет ли он отображать двумерный массив?

Автор: Буратиныч 12.1.2012, 21:00
Тоже интересен какой-нибудь простой наглядный пример отражения массива или коллекции в DataGrid на C# и XAML. Не получается никак сделать привязку к таблице.

Автор: Gvozdin 12.1.2012, 21:18
Да никаких проблем

http://www.codeproject.com/KB/WPF/WPFDataGridExamples.aspx - для тех кто работает через DataSet

http://www.i-programmer.info/programming/wpf-workings/620-using-the-wpf-net-40-datagrid-.html - для тех кто предпочитает MVVM

Автор: Буратиныч 16.1.2012, 10:13
Не могу пока найти решения как привязать коллекцию, не имеющую заранее определённого количества строк и столбцов, типа
[code=csharp]

Код

            string[] str1 = new string[] {"one","two","3"};
            string[] str2 = new string[] { "4", "five", "6" };


Правильно я понимаю, что нужно создавать отдельный класс, который будет определять свойство для каждой ячейки или всё гораздо проще? Покажите пример, плз.

Автор: Gvozdin 16.1.2012, 10:24
Ну пусть у нас будет IList<string[]> (в принципе тоже что и string[][])

Ставим нашу коллекцию в DataGrid.ItemsSource и делаем колонки:

<DataGridTextColumn Binding={Binding Path=[0]}/>
<DataGridTextColumn Binding={Binding Path=[1]}/>
<DataGridTextColumn Binding={Binding Path=[2]}/>

Если заранее не известно сколько будет колонок, то придется динамически создавать колонки из кода.

Автор: Буратиныч 16.1.2012, 11:18
Да, нужно как раз динамически создавать колонки из кода.
Конструкция должна быть типа такой? Что ещё необходимо добавить? В XALM остаётся только dataGrid1 кинуть?

Код

            IList<string[]> digits = new IList<string[]>();
            for (int j = 0; j < i; j++)
            {
                ...
                digits.Add(current_string)
            }
            dataGrid1.ItemsSource = digits;

Автор: Буратиныч 16.1.2012, 20:28
Вообще возможно ли размещение в таблице данных в массиве или коллекции с заранее неопределённой размерностью? Может я зря трачу время на поиски ответа и не там копаю, и стоит вернуться в Windows Forms. Задача то вроде простейшая.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)