@FAwafawf1212

Как преобразовать выбранную ячейку двойным кликом в int?

Делаю базу данных по учету техники и хочу реализовать такую функцию:
1. Открывается окно добавления комплекта техники
2. в нем представлены поля таким образом: название аппаратуры / кнопка
3. После того, как пользователь нажимает на кнопку, открывается список datagrid ( в новом окне) ( в соответствии с тем, напротив какого названия аппаратуры ткнул пользователь) и после этого человек в этом списке ищет нужный для себя аппарат и двойным щелчком кликает на него.
4. После этих действий программа должна определить на какое поле он нажал и передать информацию о id аппарата, который находится на этой строчке в страничку добавления комплекта техники.

Я сделал несколько этапов, дошёл до выбора двойным щелчком и после нажатия смог вывести получнные данные в message box, но у этого есть 2 минуса:
1) пользователь должен будет нажать на айди принтера
2) если он нажмет на соседние столбцы одной строчки, то данные будут не верными.
Поэтому вопрос, как сделать так, чтоб после нажатия на любое поле в строке, он определял его поле id и передавал его в переменную нужную мне.

Вот как я делал

using System;
using System.Collections.Generic;
using System.ComponentModel;
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.Shapes;

namespace YchetApparatov
{
    /// <summary>
    /// Логика взаимодействия для PrinterListWindow.xaml
    /// </summary>
    public partial class PrinterListWindow : Window
    {

        //Выбранный элемент

        public static int SelectPrinterInt;
        public PrinterListWindow()
        {
            InitializeComponent();
            DGPrinterViev.ItemsSource = NormApparatYchetEntities2.GetContext().PrinterTable.ToList(); // здесь я выгружаю в datagrid данные из БД, конкретно в этой таблице содержатся  принтеры, Id принтера, модель и тд



        }


        private void DGPrinterViev_MouseDoubleClick(object sender, MouseButtonEventArgs e) // по двойному клику на datagrid событие реализовал так
        {
            int selectedColumn = DGPrinterViev.CurrentCell.Column.DisplayIndex; 
            var selectedCell = DGPrinterViev.SelectedCells[selectedColumn];
            var cellContent = selectedCell.Column.GetCellContent(selectedCell.Item);

            if (cellContent is TextBlock)
            {
                MessageBox.Show((cellContent as TextBlock).Text); // вывожу данные,  на которые нажал
            }
        }
              

   
}  
}


вот XAML

<Window x:Class="YchetApparatov.PrinterListWindow"
        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"
        xmlns:local="clr-namespace:YchetApparatov"
        mc:Ignorable="d"
        Title="PrinterListWindow" Height="720" Width="1280">
    <Grid Margin="0,97,0,34">
        <Grid.RowDefinitions>
        </Grid.RowDefinitions>
        <DataGrid x:Name="DGPrinterViev" AutoGenerateColumns="False" IsReadOnly="True" Margin="0,-3,0,126"
              ItemsSource="{Binding Source}" SelectedItem="{Binding SelectedRow}" MouseDoubleClick="DGPrinterViev_MouseDoubleClick">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Модель принтера" Binding="{Binding ModelPrinter}" ></DataGridTextColumn>
                <DataGridTextColumn Header="Цвтеной или ЧБ" Binding="{Binding ColorOrBW}" ></DataGridTextColumn>
                <DataGridTextColumn Header="Скорость печати в минуту" Binding="{Binding SkorostPechati}" ></DataGridTextColumn>
                <DataGridTextColumn Header="Инвентарный номер принтера" Binding="{Binding InventarNomerPrinter}" ></DataGridTextColumn>
                <DataGridTextColumn Header="Серийный номер принтера" Binding="{Binding SeriyNomerPrinter}" ></DataGridTextColumn>
                <DataGridTextColumn Header="Дата прихода принтера" Binding="{Binding DataPrihodaPrinter}" ></DataGridTextColumn>
                <DataGridTextColumn Header="Дата списания принтера" Binding="{Binding DataSpisanPrinter}" ></DataGridTextColumn>
            </DataGrid.Columns>



        </DataGrid>

        <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"/>

    </Grid>
</Window>


Если надо могу скинуть остальной код какой-то
  • Вопрос задан
  • 54 просмотра
Решения вопроса 1
@Ksarrik
Добрый день. Как я понял вам нужен ID из строки DataGrid. А не проще получить выбранную строку из вашего объекта привязанного к DataGrid и из него получить Id после приведения?
то есть получится
var yourObject=DGPrinterViev.SelectedItem as <ваш тип>;
if(yourObject!=null)
{
int id=yourObject.SeriyNomerPrinter;//либо как называется нужное свойство
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы