Как связать в таблице список с привязанной таблицой?

Здравствуйте.
Возникла задача написать приложение для типичного учета продукции. Выбрал MSSQL, WPF, Entity Framework. В данном случае у меня есть таблица, которая отображается в DataGrid и другие таблицы связанные с ней, как таблицы справочники (Например: Таблица "Категория металла", "ФИО" и .т.д.).
Проблема заключается в том, что я не знаю как мне сделать чтобы в таблице был элемент ComboBox, который заполнен справочником, и при выборе элемента соседняя колонка заполнялась бы массой этого элемента взятые из этой таблицы.
Пример:
482ad1fe9f74.png

Привожу исходник моделей:

//таблица 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
}
  • Вопрос задан
  • 3159 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы