Здравствуйте.
Возникла задача написать приложение для типичного учета продукции. Выбрал MSSQL, WPF, Entity Framework. В данном случае у меня есть таблица, которая отображается в DataGrid и другие таблицы связанные с ней, как таблицы справочники (
Например: Таблица "Категория металла", "ФИО" и .т.д.).
Проблема заключается в том, что я не знаю как мне сделать чтобы в таблице был элемент ComboBox, который заполнен справочником, и при выборе элемента соседняя колонка заполнялась бы массой этого элемента взятые из этой таблицы.
Пример:
Привожу исходник моделей:
//таблица Stelug - справочник стелюг
public partial class Stelug
{
public Stelug()
{
this.plavkas = new HashSet<plavka>();
}
public int id { get; set; }
public int nStelug { get; set; }
public double mass { get; set; }
public virtual ICollection<plavka> plavkas { get; set; }
}
//таблицы Plavka - основная таблица где вся информация
public partial class plavka
{
public plavka()
{
this.chemicals = new HashSet<chemical>();
this.paketPlavkas = new HashSet<paketPlavka>();
}
public System.Guid id { get; set; }
public int plavka1 { get; set; }
public System.DateTime dataPrig { get; set; }
public int catMetal { get; set; } //это связаное поле с таблицой catMetal
public Nullable<int> smena { get; set; }
public Nullable<int> masterFIO { get; set; } //это связаное поле с таблицой FioDict
public Nullable<int> nSteluga { get; set; } //это связаное поле с таблицой Stelug
public Nullable<double> mBrutto { get; set; }
public Nullable<double> mNetto { get; set; }
public Nullable<int> nKonveera { get; set; }
public Nullable<int> otkFIO { get; set; }
public bool status { get; set; }
public bool brak { get; set; }
public Nullable<double> mBrak { get; set; }
public string comments { get; set; }
public virtual catMetal catMetal1 { get; set; }
public virtual FioDict FioDict { get; set; }
public virtual ICollection<paketPlavka> paketPlavkas { get; set; }
public virtual Stelug Stelug { get; set; }
}
Ну а дальше я сделал класс где описал связь с EF:
public class MainViewModel : INotifyPropertyChanged, IDisposable
{
/// <summary>
/// Наш контекст данных
/// </summary>
private MagnesiumEntities _dataContext;
/// <summary>
/// таблица "Плавок"
/// </summary>
public ObservableCollection<plavka> Plavkas { get; set; }
public IEnumerable<string> CatMetals { get; private set; }
public IEnumerable<string> FioDict { get; private set; }
public IEnumerable<Stelug> Stelug { get; private set; }
public MainViewModel()
{
_dataContext = new MagnesiumEntities();
Plavkas = new ObservableCollection<plavka>(_dataContext.plavkas);
CatMetals = (from db in _dataContext.catMetals select db.category).ToList();
FioDict = (from db in _dataContext.FioDicts select db.FIO).ToList();
Stelug = (from db in _dataContext.Stelugs select db).ToList();
Save = new ActionCommand(SaveChanges) { IsExecutable = true };
}
private void SaveChanges()
{
_dataContext.SaveChanges();
}
#region Команды
/// <summary>
/// Команда для сохранения
/// </summary>
public ActionCommand Save { get; set; }
#endregion
#region INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged(string propertyName)
{
if (PropertyChanged == null)
{
return;
}
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
}