@FAwafawf1212

Как я могу объединить несколько столбцов в один datagrid для дальнейшего редактирования?

Я работаю на visual studio, C#, WPF, БД на SQL. У меня есть datagrid и одна большая проблема. Мне нужно вывести в datagrid данные из нескольких таблиц. В первом datagrid у меня 4 поля, первое счетчик, второе intовое в нем я пишу номер кабинета и третье с четвертым полем - там лежат intы, айди от других таблиц, которые я привязал через схему к этой таблице. К третьему столбцу идёт ключ, который связана с таблицей, где содержится информация о сотрудниках, а именно их ФИО и тд. К четвертому столбцу идёт ключ от таблицы, где содержится информация о об оборудовании ( оно комплектами идёт. Счетчик, название комплекта и его состав, который в свою очередь состоит из кучи других ключей уже подключенных к нему, а те ведут к таблицам с мышками, клавой и прочим) Мне нужно сделать так, чтоб в datagrid выводилось следующее: Номер кабинета, ФИО пользователя (можно только фамилию), и краткая информация о технике, что есть в комплекте, если он подключен. Самая большая проблема в том, что я могу через join объединить, но тогда с редактированием будут проблемы, эта функция не получается, поэтому я пока остановился на следующем: Сделал так, что можно редактировать, удалять, обновлять строки datagrid, но в него выводится пока только информация о номере кабинета и айдишниках ключей, которые подключены ( не знаю как переделать на нужные мне поля). Подскажите, как реализовать, чтоб была возможность выполнять функции редактирования, удаления и т.д. Вот C# код страницы, где лежит datagrid.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
 
namespace YchetApparatov
{
  
    public partial class CabinetPage : Page
    {
        
        public CabinetPage()
        {
            InitializeComponent();
            DGCabinetViev.ItemsSource = NormApparatYchetEntities2.GetContext().CabinetTable.ToList();
 
        }
 
        private void UpdateCabinetClick(object sender, RoutedEventArgs e)
        {
            DGCabinetViev.ItemsSource = NormApparatYchetEntities2.GetContext().CabinetTable.ToList();
 
        }
 
        private void DeleteCabinetClick(object sender, RoutedEventArgs e)
        {
            var cabinetremoving = DGCabinetViev.SelectedItems.Cast<CabinetTable>().ToList();
 
            if (MessageBox.Show($" вы точно хотите удалить следующие {cabinetremoving.Count()} элементов?", "внимание",
                    MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
 
                try
                {
                    NormApparatYchetEntities2.GetContext().CabinetTable.RemoveRange(cabinetremoving);
                    NormApparatYchetEntities2.GetContext().SaveChanges();
                    MessageBox.Show("данные удалены");
 
                    DGCabinetViev.ItemsSource = NormApparatYchetEntities2.GetContext().CabinetTable.ToList();
                }
 
 
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message.ToString());
                }
        }
 
        private void AddNewCabinetClick(object sender, RoutedEventArgs e)
        {
            AddCabinetWindow addnewcabinet = new AddCabinetWindow(null);
            addnewcabinet.Show();
        }
 
        private void BtnEdit_Click(object sender, RoutedEventArgs e)
        {
            AddCabinetWindow addnewcabinet = new AddCabinetWindow((sender as Button).DataContext as CabinetTable);
            addnewcabinet.Show();
        }
    }
 
}


Вот его код, но уже в XAML

<Page x:Class="YchetApparatov.CabinetPage"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:local="clr-namespace:YchetApparatov"
      mc:Ignorable="d" 
      d:DesignHeight="720" d:DesignWidth="1280"
      Title="CabinetPage">

    <Grid Margin="0,97,0,34">
        <Grid.RowDefinitions>
        </Grid.RowDefinitions>
        <DataGrid x:Name="DGCabinetViev" AutoGenerateColumns="False" IsReadOnly="True" Margin="0,-3,0,126">

            <DataGrid.Columns>
                <DataGridTextColumn Header="Номер кабинета" Binding="{Binding NomerCabineta}" Width="*" ></DataGridTextColumn>
                <DataGridTextColumn Header="Айди пользователя" Binding="{Binding IdPolzovatel}"  Width="*"></DataGridTextColumn>
                <DataGridTextColumn Header="Айди комплекта" Binding="{Binding IdComplect}" Width="*"></DataGridTextColumn>
              
                <DataGridTemplateColumn>
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Button Content="Редактировать" Name="BtnEdit" Click="BtnEdit_Click" Canvas.Left="10" Canvas.Top="63" Width="107" Height="21"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>
        <Button x:Name="AddNewCabinet" HorizontalAlignment="Left" Margin="7,-94,0,0" VerticalAlignment="Top" Width="51" Background="{x:Null}" Click="AddNewCabinetClick" Height="45">
            <StackPanel Orientation="Horizontal" Height="45" Width="51">
                <Image Source="images/Plus.png" Margin="0,0,5,6" Width="46" />

            </StackPanel>
        </Button>
        <Button x:Name="DeleteCabinet" HorizontalAlignment="Left" Margin="63,-94,0,0" VerticalAlignment="Top" Width="57" Click="DeleteCabinetClick" Background="{x:Null}" Height="45">
            <StackPanel Orientation="Horizontal" Height="45" Width="51">
                <Image Source="images/Krestik.png" Margin="0,0,5,5" Width="48" />
            </StackPanel>
        </Button>
        <Button Content="Очистить" HorizontalAlignment="Left" Margin="0,-30,0,0" VerticalAlignment="Top" Width="75"/>
        <TextBox HorizontalAlignment="Left" Height="22" Margin="88,-30,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="165"/>
        <Label Content="Фильтр" HorizontalAlignment="Left" Margin="0,-55,0,0" VerticalAlignment="Top" Height="25" Width="63"/>
        <Label Content="Поиск" HorizontalAlignment="Left" Margin="88,-55,0,0" VerticalAlignment="Top" Height="25" Width="63"/>
        <Button x:Name="UpdateCabinet" HorizontalAlignment="Left" Margin="125,-94,0,0" VerticalAlignment="Top" Width="51" Background="{x:Null}" Click="UpdateCabinetClick" Height="45">
            <StackPanel Orientation="Horizontal" Height="45" Width="51">
                <Image Source="images/Update.png" Margin="0,0,5,0" Width="47" />
            </StackPanel>
        </Button>
    </Grid>
</Page>
  • Вопрос задан
  • 233 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы