AmalRaj@Sync Ответов: 0

Как загрузить данные родительского дочернего уровня в datagridview?


Hi All,

I have datasource which implements child and parent level options implemented with 2 inner classes. When i load the data to the dataGridView , the grid is empty. 



Here is the code.

    public class ViewModel : INotifyPropertyChanged
    {
    private const int NUM_LEVEL1 = 500;
    private const int NUM_LEVEL2_EACH_LEVEL = 6;

    public List<Level1Item> Level1Items
    {
        get { return _level1Items; }
    }

    private readonly List<Level1Item> _level1Items = new List<Level1Item>();

    public ViewModel()
    {
        for (int lv1Index = 0; lv1Index < NUM_LEVEL1; lv1Index++)
        {
            var newLv1Item = new Level1Item
            {
                Status = "300-INTQUA - International Quarterback Pty Ltd",
                Currency = "AUD",
                Amount = "$9,942.11",
                Underwriter = "Fitness Centre Scheme",
                Level2Items = new List<Level2Item>(),
            };

            for (int lv2Index = 0; lv2Index < NUM_LEVEL2_EACH_LEVEL; lv2Index++)
            {
                var newLv2Item = new Level2Item
                {
                    Status = "Outstanding " + lv1Index + "/" + lv2Index,
                    Transaction = "300-0166574",
                    Date = "15/11/2016",
                    Type = "Renew",
                    Description = "039246 Industrial Special",
                    Effective = "01/12/2016",
                    Currency = "AUD",
                    Amount = "$10,887.00",
                    Underwriter = "QBE Insurance (Australia) Ltd",
                };
                newLv1Item.Level2Items.Add(newLv2Item);
                newLv2Item.PropertyChanged += newLv2Item_PropertyChanged;
            }

            _level1Items.Add(newLv1Item);
        }
    }

    void newLv2Item_PropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(e.PropertyName));
    }

    public class Level1Item : INotifyPropertyChanged
    {
        public List<Level2Item> Level2Items
        {
            get;
            set;
        }

        private bool _doDispatch;
        public bool DoDispatch
        {
            get { return _doDispatch; }
            set
            {
                _doDispatch = value;
                
                // Other business logic goes here..

                Level2Items.ForEach(item => item.DoDispatch = value);
                
                if (value)
                {
                    Level2Items.ForEach(item => item.DoAbandon = false);
                }

                OnPropertyChanged("DoDispatch");
            }
        }

        private bool _doAbandon;
        public bool DoAbandon
        {
            get { return _doAbandon; }
            set
            {
                _doAbandon = value;

                // Other business logic goes here..
                
                Level2Items.ForEach(item => item.DoAbandon = value);

                if (value)
                {
                    Level2Items.ForEach(item => item.DoDispatch = false);
                }

                OnPropertyChanged("DoAbandon");
            }
        }

        public bool DoDispatchPremiumFundingQuote
        {
            get;
            set;
        }

        public bool DoEmail
        {
            get;
            set;
        }

        public bool DoPrint
        {
            get;
            set;
        }

        public string Status
        {
            get;
            set;
        }

        public string Currency
        {
            get;
            set;
        }
        public string Amount
        {
            get;
            set;
        }
        public string Underwriter
        {
            get;
            set;
        }

        public void OnPropertyChanged(string name)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(name));
        }

        public event PropertyChangedEventHandler PropertyChanged;
    }

    public class Level2Item : INotifyPropertyChanged
    {
        private bool _DoDispatch;
        public bool DoDispatch
        {
            get { return _DoDispatch; }
            set
            {
                _DoDispatch = value;
                OnPropertyChanged("DoDispatch");
            }
        }

        internal void UpdateDispatch(bool dispatch)
        {
            // Other business logic omitted here..

            DoDispatch = dispatch;
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs("DoDispatch"));
            }
        }

        private bool _DoAbandon;
        public bool DoAbandon
        {
            get { return _DoAbandon; }
            set
            {
                _DoAbandon = value;
                OnPropertyChanged("DoAbandon");
            }
        }

        internal void UpdateAbandon(bool abandon)
        {
            // Other business logic omitted here..

            DoAbandon = abandon;
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs("DoAbandon"));
            }
        }

        public string Status
        {
            get;
            set;
        }

        public string Transaction
        {
            get;
            set;
        }

        public string Date
        {
            get;
            set;
        }

        public string Type
        {
            get;
            set;
        }

        public string Description
        {
            get;
            set;
        }

        public string Effective
        {
            get;
            set;
        }

        public string Currency
        {
            get;
            set;
        }

        public string Amount
        {
            get;
            set;
        }

        public string Underwriter
        {
            get;
            set;
        }

        public void OnPropertyChanged(string name)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(name));
        }
        public event PropertyChangedEventHandler PropertyChanged;
    }

    public event PropertyChangedEventHandler PropertyChanged;
    }


Could any one share me what i have done in this to load the child data?

Appreciate your response.

Regards,
Amal 


Что я уже пробовал:

1) это.dataGridView1.Источник данных = новый файл ViewModel(); сетка пуста при использовании такой.

2)Этот.dataGridView1.Источник данных = новый файл ViewModel().Level1Items; первый уровень-данные загружаются только по сетке.

Здесь Level1items - это коллекция списков, содержащая родительские данные, и коллекция, содержащая дочерние данные. Но сетка загружает только данные уровня 1.

RickZeeland

Я думаю, что было бы лучше "сгладить" ваши данные. Или вы можете попробовать использовать BindingList в сочетании с конструкцией master-detail, об этом есть отличная статья в CodeProject: http://www.codeproject.com/Articles/24656/A-Detailed-Data-Binding-Tutorial

0 Ответов