У меня есть 4 поля со списком, каждое из которых помечено в раскрывающемся меню. После этого в своем коде я хочу настроить оператор if else для ComboBox. если элемент выбран, он добавляется в DataGrid на основе определенных значений (стоимость, тип элемента и имя элемента).
XAML ComboBox (сокращенно для этого вопроса)
<TextBlock>Electronics:</TextBlock>
<ComboBox>
<ComboBoxItem x:Name = "cmbxElectronics">
<TextBlock x:Name = "txtLaptop">Laptop</TextBlock>
</ComboBoxItem>
<ComboBoxItem>
<TextBlock x:Name = "txtPC">PC</TextBlock>
</ComboBoxItem>
<ComboBoxItem>
<TextBlock x:Name = "txtStove">Stove</TextBlock>
</ComboBoxItem>
<ComboBoxItem>
<TextBlock x:Name = "txtCamera">Camera</TextBlock>
</ComboBoxItem>
</ComboBox>
Вот код XAML Data Grid:
<StackPanel Grid.Row = "0" Grid.Column = "1" Margin = "5">
<DataGrid Margin = "5" Height = "195">
<DataGrid.Columns>
<DataGridTextColumn Header = " Item" Width = "*" />
<DataGridTextColumn Header = " Type" Width = "*"/>
<DataGridTextColumn Header = " Cost($)" Width = "*"/>
</DataGrid.Columns>
<DataGrid.Resources>
<Style TargetType = "{x:Type DataGridColumnHeader}">
<Setter Property = "Background" Value = "#3280fc"/>
<Setter Property = "FontWeight" Value = "SemiBold"/>
<Setter Property = "BorderThickness" Value = "0,0,1,2"/>
<Setter Property = "BorderBrush" Value = "Black"/>
</Style>
</DataGrid.Resources>
</DataGrid>
</StackPanel>
Наконец, вот код в файле cs, который создает класс для DataGrid (счет-фактура) и метод для расчета итогов (просто хочу знать, как установить ComboBox в DataGrid):
private class Invoice
{
public string Item { get; set; }
public string Type { get; set; }
public double Price { get; set; }
}
private void Calculate()
{
double price = 0;
const double HST = 0.18;
if (cmbxElectronics.IsSelected)
{
}
}
Как только я выясню это для одного из них, остальные должны быть простыми. Дайте мне знать, если требуется дополнительная информация, спасибо.
В основном обратите внимание на привязку:
<DataGrid x:Name = "DataGridInvoices" ItemsSource = "{Binding}" Height = "236" Width = "636" AutoGenerateColumns = "False" CanUserAddRows = "False" >
<DataGrid.Columns >
<DataGridTextColumn Header = " Item" Width = "*" Binding = "{Binding Item}"/>
<DataGridTextColumn Header = " Type" Width = "*" Binding = "{Binding Type}"/>
<DataGridTextColumn Header = " Cost($)" Width = "*" Binding = "{Binding Price}"/>
</DataGrid.Columns>
Удалить повторяющиеся столбцы и удалить последнюю пустую строку:
AutoGenerateColumns = "False" CanUserAddRows = "False"
Xaml:
<Window x:Class = "WpfApp5.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"
xmlns:local = "clr-namespace:WpfApp5"
mc:Ignorable = "d"
Title = "MainWindow" Height = "450" Width = "800">
<Grid>
<TextBlock>Electronics:</TextBlock>
<StackPanel Grid.Row = "0" Grid.Column = "1" Margin = "5">
<DataGrid x:Name = "DataGridInvoices" ItemsSource = "{Binding}" Height = "236" Width = "636" AutoGenerateColumns = "False" CanUserAddRows = "False" >
<DataGrid.Columns >
<DataGridTextColumn Header = " Item" Width = "*" Binding = "{Binding Item}"/>
<DataGridTextColumn Header = " Type" Width = "*" Binding = "{Binding Type}"/>
<DataGridTextColumn Header = " Cost($)" Width = "*" Binding = "{Binding Price}"/>
</DataGrid.Columns>
<DataGrid.Resources>
<Style TargetType = "{x:Type DataGridColumnHeader}">
<Setter Property = "Background" Value = "#3280fc"/>
<Setter Property = "FontWeight" Value = "SemiBold"/>
<Setter Property = "BorderThickness" Value = "0,0,1,2"/>
<Setter Property = "BorderBrush" Value = "Black"/>
</Style>
</DataGrid.Resources>
</DataGrid>
</StackPanel>
<ComboBox x:Name = "ComboBox1" HorizontalAlignment = "Left" Margin = "298,300,0,0" VerticalAlignment = "Top" Width = "120" SelectionChanged = "ComboBox1_SelectionChanged">
<ComboBoxItem Content = "Laptop"/>
<ComboBoxItem Content = "PC"/>
<ComboBoxItem Content = "Stove"/>
<ComboBoxItem Content = "Camera"/>
</ComboBox>
</Grid>
</Window>
Код:
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
namespace WpfApp5
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
Invoice invoice;
List<Invoice> Laptop = new List<Invoice>()
{
new Invoice(){Item = "0",Type = "A",Price=10000},
new Invoice(){Item = "1",Type = "B",Price=20000},
new Invoice(){Item = "2",Type = "A",Price=15000},
};
public MainWindow()
{
InitializeComponent();
}
private class Invoice
{
public string Item { get; set; }
public string Type { get; set; }
public double Price { get; set; }
}
private void ComboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
//Intercept the selected name
string sel = ComboBox1.SelectedItem.ToString();
string Rsel = sel.Substring(sel.IndexOf(" ") + 1);
if (Rsel == "Laptop")
{
DataGridInvoices.ItemsSource = Laptop;
}
}
}
}