Grant Mc Ответов: 1

Можно ли создать пользовательский datarow [WPF]


Привет.

Я хотел бы поместить datagrid в мое приложение WPF, которое будет привязано к базе данных MYSQL. Все достаточно просто.

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

Возможно ли это? Должен ли я искать другой сторонний инструмент? Если да, то есть какие-нибудь предложения?

Или это просто трудно сделать.

Пример того, что я имею в виду...
https://i345.photobucket.com/albums/p372/Grant_McConville/Datarow%20test_zps8to1zycb.jpg

Что я уже пробовал:

Я потратил много часов на поиск в Google, но не могу найти никого, кто задавал бы тот же вопрос, или какой-либо подсказки, с чего начать.

1 Ответов

Рейтинг:
8

TheRealSteveJudge

Вы можете использовать так называемые DataGridTemplateColumns.

Сначала вы должны отключить автоматическую генерацию столбцов, установив свойству AutoGenerateColumns значение "False".
Затем вы должны предоставить шаблон для каждого столбца.

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

Остальные колонки будут вашим домашним заданием. :-) Удачи!

<Window x:Class="CustomDataRow.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <DataGrid Name="DataGridPersons" AutoGenerateColumns="False">
            <DataGrid.Columns>
                <DataGridTemplateColumn>
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Border Background="LightGray">
                                <TextBlock Text="Address"></TextBlock>
                            </Border>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
                <DataGridTemplateColumn>
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Grid>
                                <Grid.RowDefinitions>
                                    <RowDefinition></RowDefinition>
                                    <RowDefinition></RowDefinition>
                                    <RowDefinition></RowDefinition>
                                </Grid.RowDefinitions>
                                <TextBlock Text="{Binding Name}"></TextBlock>
                                <TextBlock Grid.Row="1" Text="{Binding Street}"></TextBlock>
                                <TextBlock Grid.Row="2" Text="{Binding Location}"></TextBlock>
                            </Grid>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Window>

Код, лежащий в основе этого примера:
using System.Collections.Generic;
using System.Windows;
using CustomDataRow.Models;

namespace CustomDataRow
{
    public partial class MainWindow
    {
        private List<Person> persons;

        public MainWindow()
        {
            Loaded += MainWindow_Loaded;

            InitializeComponent();
        }

        private void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            persons = new List<Person>
            {
                new Person
                {
                    Name = "Frank Sinatra",
                    Street = "26 Music Lane",
                    Location = "New York"
                },
                new Person
                {
                    Name = "Paul Young",
                    Street = "Data",
                    Location = "New York"
                },
                new Person
                {
                    Name = "Jim Beam",
                    Street = "26 Music Lane",
                    Location = "New York"
                }
            };

            DataGridPersons.ItemsSource = persons;
        }
    }
}

и конечно же человек модель:
namespace CustomDataRow.Models
{
    public class Person
    {
        public string Name { get; set; }
        public string Street { get; set; }
        public string Location { get; set; }
    }
}


Grant Mc

Спасибо за это, похоже, отличная отправная точка для меня.

Grant Mc

Пока все идет отлично.

Еще раз большое вам спасибо TheRealSteveJudge

TheRealSteveJudge

Спасибо, что приняли мой ответ. Я рад, что это помогло вам!