Привет Я довольно новичок в WPF
так голый со мной. У меня возникают трудности с comboboxcolumn
в сетке данных, я хочу, чтобы значение, которое было отображено и отредактировано, взято из объекта данных, используемого остальной сетью данных, и значения для раскрывающегося списка, взятого из другого объекта данных. У меня есть список combobox
dropdown
, но у меня возникают трудности с его отображением из контекста строки сетки данных.DatagridComboBoxColumn не отображает значение
Вот мой макет
<StackPanel Orientation="Horizontal">
<Label>Sheet date:</Label>
<DatePicker/>
</StackPanel>
<DataGrid x:Name="gridTimesheets" Height="205" Margin="4, 4, 4, 0" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTextColumn IsReadOnly="True" Header="No." Width="40" Binding="{Binding ItemNumber }"></DataGridTextColumn>
<DataGridComboBoxColumn Width="120" Header="WorksorderID" x:Name="worksorderColumn"
SelectedValueBinding="{Binding Path=WorksorderID}" SelectedValuePath="WorksorderID"
DisplayMemberPath="WONA">
</DataGridComboBoxColumn>
<DataGridTextColumn Header="Time On" Width="60" Binding="{Binding TimeOn}"></DataGridTextColumn>
<DataGridTextColumn Header="Time Off" Width="60" Binding="{Binding TimeOff}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="Duration" Width="65" Binding="{Binding Duration}"></DataGridTextColumn>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="Delete" x:Name="btnDelete"
Click="btnDelete_Click"></Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
<Button Content="Add" Margin="4, 4, 4, 0" Click="btnAdd_Click"></Button>
<Button Content="Export" Margin="4, 4, 4, 4" ></Button>
</StackPanel>
Вот мой код
namespace Timesheet
{
public partial class MainWindow : Window
{
TimesheetDatabase.TimesheetDB timesheetdb = new TimesheetDatabase.TimesheetDB();
EFACSDatabase.EFACSDB efacsdb = new EFACSDatabase.EFACSDB();
public MainWindow()
{
InitializeComponent();
gridTimesheets.ItemsSource = timesheetdb.GetTimesheetItems();
worksorderColumn.ItemsSource = efacsdb.GetOrderItems();
}
OrderItem
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel;
namespace EFACSDatabase
{
public class OrderItem : INotifyPropertyChanged
{
private string orderid;
public string OrderID
{
get { return orderid; }
set
{
orderid = value;
OnPropertyChanged(new PropertyChangedEventArgs("OrderID"));
}
}
private string wona;
public string WONA
{
get { return wona; }
set
{
wona = value;
OnPropertyChanged(new PropertyChangedEventArgs("WONA"));
}
}
private string partid;
public string PartID
{
get { return partid; }
set
{
partid = value;
OnPropertyChanged(new PropertyChangedEventArgs("PartID"));
}
}
private string customer;
public string Customer
{
get { return customer; }
set
{
customer = value;
OnPropertyChanged(new PropertyChangedEventArgs("Customer"));
}
}
private string description;
public string Description
{
get { return description; }
set
{
description = value;
OnPropertyChanged(new PropertyChangedEventArgs("Description"));
}
}
public OrderItem(string orderid, string wona, string partid, string customer, string description)
{
OrderID = orderid;
WONA = wona;
PartID = partid;
Customer = customer;
Description = description;
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(PropertyChangedEventArgs e)
{
if (PropertyChanged != null)
PropertyChanged(this, e);
}
}
}
TimesheetIt эм
using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
namespace TimesheetDatabase
{
public class TimesheetItem : INotifyPropertyChanged
{
private int timesheetitemid;
public int TimesheetItemID
{
get { return timesheetitemid; }
set
{
timesheetitemid = value;
OnPropertyChanged(new PropertyChangedEventArgs("TimesheetItemID"));
}
}
private int timesheetid;
public int TimesheetID
{
get { return timesheetid; }
set
{
timesheetid = value;
OnPropertyChanged(new PropertyChangedEventArgs("TimesheetID"));
}
}
private int itemnumber;
public int ItemNumber
{
get { return itemnumber; }
set
{
itemnumber = value;
OnPropertyChanged(new PropertyChangedEventArgs("ItemNumber"));
}
}
private TimeSpan timeon;
public TimeSpan TimeOn
{
get { return timeon; }
set
{
timeon = value;
OnPropertyChanged(new PropertyChangedEventArgs("TimeOn"));
}
}
private TimeSpan timeoff;
public TimeSpan TimeOff
{
get { return timeoff; }
set
{
timeoff = value;
OnPropertyChanged(new PropertyChangedEventArgs("TimeOff"));
}
}
private String worksorderid;
public String WorksorderID
{
get { return worksorderid; }
set
{
worksorderid = value;
OnPropertyChanged(new PropertyChangedEventArgs("WorksorderID"));
}
}
private double duration;
public double Duration
{
get { return duration; }
set
{
duration = value;
OnPropertyChanged(new PropertyChangedEventArgs("Duration"));
}
}
public TimesheetItem(int timesheetitemid, int timesheetid, int itemnumber, TimeSpan timeon, TimeSpan timeoff, String worksorderid, double duration)
{
TimesheetItemID = timesheetitemid;
TimesheetID = timesheetid;
ItemNumber = itemnumber;
TimeOn = timeon;
TimeOff = timeoff;
WorksorderID = worksorderid;
Duration = duration;
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(PropertyChangedEventArgs e)
{
if (PropertyChanged != null)
PropertyChanged(this, e);
}
}
}
Я пытаюсь получить combobox
для отображения значения из GetTimesheetItems
и позволяет пользователю изменить это значение из выпадающего используя значения из GetOrderItems
.
Спасибо за любую помощь
Ваш код сравнивает WorkorderID строки строки с WONA comboBox. лучше вы меняете выделенноеValuePath на WorkorderID (должно быть свойство itemsSource выпадающего списка) –
Хорошо, я изменил это, его значение пока не отображается. Спасибо за вашу помощь – user1412672
Поскольку comboBox itemssource - это OrderItems, selectedValuePath должен быть OrderID, а затем вы хотите сопоставить OrderId с Row's WorkorderID, поэтому SelectedValueBinding должен быть выполнен для WorkorderID.просто измените selectedValuePath & inform. –