C # DataGrid проблема с привязкой - PullRequest
1 голос
/ 03 мая 2011
EditVariationWindowModel edit = (EditVariationWindowModel)this.DataContext;

        var datagrid = dataGrid3;



        foreach (Variation variation in edit.SelQuestion.Variations)
        {
            foreach (var parameter in variation.QuestionParameters)
            {
                var binding = new Binding(parameter.Value);
                var column = new DataGridTextColumn();
                column.Header = parameter.Key.Name;
                column.Binding = binding;
                datagrid.Columns.Add(column);

            }
        }

, так что это мой код в коде моей сетки данных.Я работаю в WPF.

Теперь в чем проблема: я просто получаю одну строку, но много повторяющихся заголовков столбцов (с правильными привязками), но, как вы уже поймете, я не хочу, чтобы они были рядом друг с другом, но под другим.например:

не так

header1 | header2 | header1 | header2|
string1 | string2 | string 1| string2|

, но

 header1 | header2
 string1 | string2
 string1 | string2

Кто-нибудь знает, как я могу решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 03 мая 2011

Вы должны сначала добавить все столбцы, а затем выбрать их при добавлении данных.

Что вы делаете, это добавляете привязку с новым столбцом.

EDIT:

Что я обычно делаю, когда мне нужно вручную добавить строки:

1.- Добавить DataColumn в DataTable и ColumnStyle в DataGrid, как:

DataColumn fNameColumn8 = new DataColumn();
fNameColumn8.DataType = System.Type.GetType("System.String");
m_dataTable.Columns.Add(fNameColumn8);

ColumnStyle myStyleColumn8 = new ColumnStyle(7);
myStyleColumn8.TextAlign = ContentAlignment.TopRight;

DataGridTableStyle dataGridTableStyle = new DataGridTableStyle();
dataGridTableStyle.MappingName = MAPPINGNAME;
dataGridTableStyle.GridColumnStyles.Add(myStyleColumn8);

this.dataGrid.TableStyles.Add(dataGridTableStyle);

2.- Назначьте отображаемое имя и имя для отображения в ColumnStyles dataGrid и Columns of DataTable:

m_dataTable.Columns[8].ColumnName = this.m_strHeader;

((DataGridTextBoxColumn)this.dataGrid.TableStyles[0].GridColumnStyles[8]).MappingName = this.m_strHeader;

((DataGridTextBoxColumn)this.dataGrid.TableStyles[0].GridColumnStyles[8]).HeaderText = this.m_strHeader;

3.- Назначьте ширину столбца в ColumnStyles DataGrid:

((DataGridTextBoxColumn)this.dataGrid.TableStyles[0].GridColumnStyles[8]).Width = 20;

4.- Заполните строки:

DataRow dataRow = this.m_dataTable.NewRow();

dataRow[this.m_strHeader] = "DATA";

this.m_dataTable.Rows.Add(dataRow);
0 голосов
/ 03 мая 2011

Вы добавляете определение столбца для каждой строки ... WTF?

Вот достойное руководство по Как связать сетку данных с коллекцией .

Приветствия. Кит.


EDIT:

Попробуйте

foreach (var parameter in edit.SelQuestion.Variations.First().QuestionParameters)

чтобы определить столбцы сетки ... см .: Первый метод

Затем (в качестве отдельного шага) заполните таблицу данных, выполнив итерацию по Вариациям ... или, что еще лучше ЧИТАЙТЕ статью, связанную выше, и просто привяжите сетку к коллекции. Нет необходимости возиться с определением столбцов и циклически проходить по каждой строке ... Сетка может делать ВСЕ это автоматически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...