Проблемы с combobox, отображением данных через binding

Не могу сделать нормальное отображение данных. Используя представление (рис.1), я могу добиться того, чтобы вместо id отображалось "человеко-читаемое" название. Но мне необходимо потом работать со строчками и представление тут не прокатит, насколько я понимаю.

как выглядит отображение представления

Рис.1 представление

без представления

Рис. 2 так моя таблица выглядит в попытке вывести единицу измерения, без представления. Далее код, который работает на эту таблицу.

Model:

public class cabel_table
{
    [Key]
    public int idcabel_table { get; set; }
    public string? cabel_name { get; set; }
    public float? count { get; set; }
    public string? commentary { get; set; }

    // [ForeignKey("unitofmeasure")]
    public int idunitofmeasure { get; set; }

    //  public virtual unitofmeasure_table unitofmeasure { get; set; }
}
public class unitofmeasure_table
{
   /* public unitofmeasure_table()
    {
        this.Cabels = new ObservableCollection<cabel_table>();
    } */

    [Key]
    public int idunitofmeasure_table { get; set; }
    public string nameunitofmeasure_table { get; set; }

    // public virtual ObservableCollection<cabel_table> Cabels { get; private set; }

} 

Context:

public class SkladContext : DbContext
{
     public DbSet<autorization_table> autorization_table { get; set; }
     public DbSet<cabel_table> cabel_table { get; set; }
     public DbSet<unitofmeasure_table> unitofmeasure_table { get; set; } 
     public DbSet<cabel_with_unit_view> cabel_with_unit_view { get; set; }


     protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
     {
         try
         {
             var connectionString = new MySqlConnectionStringBuilder
             {
                 Server = "localhost",
                 Port = 3306,
                 UserID = "root",
                 Password = "1979",
                 Database = "waterfall",
             }.ToString();

             var serverVersion = ServerVersion.AutoDetect(connectionString);
             optionsBuilder.UseMySql(connectionString, serverVersion);
         }
         catch (Exception ex)
         {
             Console.WriteLine($"Ошибка подключения: {ex.Message}");
             throw;
         }
     }
}

Grid:

<Grid Background="LightGray">
    <DataGrid AutoGenerateColumns="False" x:Name="Cabel_table_Grid" ItemsSource="{Binding}" IsReadOnly="True">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding cabel_name}" Header="Кабель" Width="120"/>
            <DataGridTextColumn Binding="{Binding count}" Header="Кол-во" Width="125"/>
            <DataGridTextColumn Binding="{Binding unitofmeasure_table.nameunitofmeasure_table}" Header="Е/И" Width="80"/>
            <DataGridTextColumn Binding="{Binding commentary}" Header="комментарий" Width="80"/>
            <DataGridTemplateColumn Header="Редактировать" Width="100">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Button Content="Редактировать" x:Name="ButtonCabelEditor" Click="ButtonCabelEditor_Click"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>
</Grid> 

xaml.cs:

private SkladContext _dbContext;
public MainMenu()
{
      InitializeComponent();
      _dbContext = new SkladContext();
      LoadData();

}

private void LoadData()
{
      var cabels2 = _dbContext.cabel_with_unit_view.ToList();
      Cabel_table2_Grid.ItemsSource = cabels2;

      //Загружаем данные из базы
      try
      {
          var cabels = _dbContext.cabel_table
              .ToList();

          Cabel_table_Grid.ItemsSource = cabels;
      }
      catch (Exception ex)
      {
          MessageBox.Show($"Ошибка загрузки данных: {ex.Message}");
      }
}

private void ButtonCabelEditor_Click(object sender, RoutedEventArgs e)
{
      // Получаем объект данных, связанный с нажатой кнопкой
      var button = sender as Button;
      var selectedCabel = button.DataContext as cabel_table; // Замените на ваш класс

      // Проверяем, что строка выбрана
      if (selectedCabel == null)
      {
          MessageBox.Show("Пожалуйста, выберите строку для редактирования");
          return;
      }

      // Создаем и открываем окно редактирования
      var editWindow = new Cabel.CabelEdit(selectedCabel);
      editWindow.Owner = this; // Делаем текущее окно владельцем
      editWindow.ShowDialog();

      // Обновляем данные после редактирования
      if (editWindow.DialogResult == true)
      {
          LoadData();
      }
}

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

редактировать

grid:

<Grid>
      <!-- Определение строк и столбцов -->
      <Grid.RowDefinitions>
          <RowDefinition Height="Auto" />
          <RowDefinition Height="Auto" />
          <RowDefinition Height="Auto" />
          <RowDefinition Height="Auto" />
          <RowDefinition />
      </Grid.RowDefinitions>
      <Grid.ColumnDefinitions>
          <ColumnDefinition Width="120" />
          <ColumnDefinition Width="*" />
      </Grid.ColumnDefinitions>

      <!-- Название кабеля -->
      <TextBlock Grid.Row="0" Grid.Column="0" Text="Название кабеля" Margin="10,5" HorizontalAlignment="Right" VerticalAlignment="Center"/>
      <TextBox x:Name="NameTextBox" Text="{Binding cabel_name}" Grid.Row="0" Grid.Column="1" Margin="10,5" VerticalAlignment="Center"/>

      <!-- Кол-во -->
      <TextBlock Grid.Row="1" Grid.Column="0" Text="Кол-во" Margin="10,5" HorizontalAlignment="Right" VerticalAlignment="Center"/>
      <TextBox x:Name="CountTextBox" Text="{Binding count}" Grid.Row="1" Grid.Column="1" Margin="10,5" VerticalAlignment="Center"/>

      <!-- Е/И -->
      <TextBlock Grid.Row="2" Grid.Column="0" Text="Е/И" Margin="10,5" HorizontalAlignment="Right" VerticalAlignment="Center"/>
      <ComboBox x:Name="unitofmeasureCB" SelectedValue="{Binding idunitofmeasure}" Grid.Row="2" Grid.Column="1" Margin="10,5" VerticalAlignment="Center">
          <ComboBoxItem/>
      </ComboBox>

      <!-- Комментарий -->
      <TextBlock Grid.Row="3" Grid.Column="0" Text="Комментарий" Margin="10,5" HorizontalAlignment="Right" VerticalAlignment="Center"/>
      <TextBox x:Name="CommentaryTextBox" Text="{Binding commentary}" Grid.Row="3" Grid.Column="1"></TextBox>


      <Button Width="70" Grid.Row="4" Grid.Column="1" x:Name="saveButton" Click="saveButton_Click" RenderTransformOrigin="-0.117,0.461">Сохранить</Button>
      <Button Width="70" Grid.Row="4" Grid.Column="1" x:Name="deleteButton" Click="deleteButton_Click" RenderTransformOrigin="1.584,0.585" Margin="187,0,23,0">Удалить</Button>

</Grid>

xaml.cs:

public cabel_table _cabel;

public CabelEdit(cabel_table cabel)
{
     InitializeComponent();
     _cabel = cabel;
     DataContext = _cabel;
}

private void saveButton_Click(object sender, RoutedEventArgs e)
{
     if (_cabel != null)
     {
         DialogResult = true;
     }
     Close();
}

Подскажите, пожалуйста, как мне решить мою проблему с отображением и combobox?


Ответы (0 шт):