2

Привет. Есть dataGridview -

<DataGrid x:Name="DataGridXAML" HorizontalAlignment="Left" Height="441" Margin="10,89,0,0" VerticalAlignment="Top" Width="1044">
            <DataGrid.Columns>
                <DataGridTextColumn Header="ID сотрудника"/>
                <DataGridTextColumn Header="Имя" Width="100"/>
                <DataGridTextColumn Header="Фамилия" Width="120"/>
                <DataGridTextColumn Header="Отчество" Width="*"/>
            </DataGrid.Columns>
</DataGrid>

Каким образом можно поменять через код количество колонок, их имя и другие параметры?

Из другой xaml страницы.

xomem
  • 473
  • Можно узнать что вы хотите получить? –  Jan 01 '18 at 09:47
  • обращаться к элементам управления можно по имени, в вашем случае это DataGridXAML –  Jan 01 '18 at 09:50
  • Обратится к элементу другой xaml страницы. – xomem Jan 01 '18 at 11:53
  • @xomem, почитайте это: https://ru.stackoverflow.com/a/764737/218063 – Андрей NOP Jan 01 '18 at 11:53
  • Прочитал. Сделал. Работает. Спасибо. – xomem Jan 01 '18 at 11:55
  • у меня есть подозрения что вы что-то делаете неправильно –  Jan 01 '18 at 12:39
  • могу поинтересоваться какую проблему вы пытаетесь решить? –  Jan 01 '18 at 12:39
  • Почему? Я же написал, что получилось. Ну а вообще, будут разные виды SQL запросов, и в зависимости от запроса dataGrid должна меняться. Подстраиваться под таблицу. – xomem Jan 01 '18 at 13:34
  • @FoggyFinder Вот есть разные таблицы. Отличающиеся количеством полей(3 и 5). При запросе с первой нужно удалить два(если ранние был вызван запрос со второй) и наоборот, при вызове с последней добавлять. Но ведь это не красиво, учитывая что таких таблиц может быть не две а пять. Создавать пять одинаковы страниц отличающихся только запросами не вариант. Как лучше поступить? – xomem Jan 01 '18 at 13:51
  • уже понятнее, но не полностью. Я бы создал для каждой таблицы свое описание столбцов с возможностью менять их видимость и уже в зависимости от запроса показывал бы тот или иной вариант. Если подобный способ вам кажется слишком многословным, то можно положиться на автогенерацию столбцов и просто менять источник данных. –  Jan 01 '18 at 14:05
  • @FoggyFinder . Спасибо. – xomem Jan 01 '18 at 16:20
  • @FoggyFinder а как сделать автогенерацию полей? Добавил такие параметры к DataGrid ItemsSource="{Binding}" AutoGenerateColumns="True" и в классе SimpleQueryResult.SQRDataGridXAML.ItemsSource = test; . Но dataGrid пуст и ошибок нет. – xomem Jan 03 '18 at 12:58
  • есть возможность показать больше кода например через gist ? по такому отрывку можно только строить предположения из-за чего так происходит –  Jan 03 '18 at 13:09
  • @FoggyFinder https://gist.github.com/xomem/2e993c79cf5ff344c0ba8ed68dc84090 вот – xomem Jan 03 '18 at 14:36
  • что-то тут не то, вы задаете string в качестве ItemsSource? –  Jan 03 '18 at 15:36
  • @FoggyFinder да. Понял что это не правильно. – xomem Jan 03 '18 at 16:11
  • @FoggyFinder А как нужно? – xomem Jan 03 '18 at 18:15
  • вы не возражаете перейти в чат? –  Jan 03 '18 at 18:31

1 Answers1

2

А в чем проблема? Например:

DataGridXAML.Columns.Add(
    new DataGridTextColumn()
    {
        Header="Дед Мороз",
        Width="200"
    });

Чтобы поменять:

DataGridXAML.Columns[0].Header="Снегурочка";

Документация: https://msdn.microsoft.com/ru-ru/library/system.windows.controls.datagrid.columns(v=vs.110).aspx

Если вам нужен доступ из другой страницы, сделайте эту страницу доступной другой странице любым путём, и получайте доступ через yourPage.DataGridXAML.Columns....

VladD
  • 206,799
  • Забыл добавить, что нужно поменять этот же элемент из другой XAML страницы. Как получить доступ к другой страницы? – xomem Jan 01 '18 at 11:44
  • А как менять данные? Не добавлять. – xomem Jan 01 '18 at 11:58
  • @xomem: Получите объект другой страницы, возьмите у него DataGridXAML, дальше точно так же. – VladD Jan 01 '18 at 12:23
  • @xomem: Чтобы менять, нужно просто DataGridXAML.Columns[0].Header="Снегурочка" – VladD Jan 01 '18 at 12:24
  • Спасибо. А есть что то типа DataGridXAML.Columns[Where name == name].Header="Снегурочка". Чтобы каждой колонке добавить идентификатор и по нему уже искать? – xomem Jan 01 '18 at 13:13
  • @xomem, заведите словарь и храните ссылки на столбцы в нем – Андрей NOP Jan 01 '18 at 13:33
  • @Андрей-nop json файл в смысле? – xomem Jan 01 '18 at 13:37
  • @xomem, я имею ввиду коллекцию типа Dictionary<string, ...> причем тут json и файл... – Андрей NOP Jan 01 '18 at 13:38
  • Сейчас посмотрю что это такое. – xomem Jan 01 '18 at 13:40
  • @xomem: Ну можно просто DataGridXAML.Columns.Where(c => c.Header == "Дед Мороз"]).Single().Header="Снегурочка", например. – VladD Jan 01 '18 at 13:59
  • ещё. В xaml разметке можно задать ширину колонке - width = "*". Это растянет её на всё поле. А как задать такую ширину всем колонкам через код? SQRDataGridXAML.ColumnWidth = ?; – xomem Jan 04 '18 at 20:15
  • @xomem: new DataGridLength(1, DataGridLengthUnitType.Star)? – VladD Jan 04 '18 at 20:53
  • @VladD большое спасибо. – xomem Jan 05 '18 at 00:39