J'ai lié 2 niveaux de données à MS DataGridView. La table enfant qui est remplie via la propriété Complex n'est pas visible. Y at-il une personnalisation que je dois faire pour activer la vue de la table imbriquée dans DataGridView
S'il vous plaît se référer à l'exemple ci-joint.Comment charger 2 éléments de niveau à DataGridview?
Voici ma classe DataSource.
public class Level1 : INotifyPropertyChanged
{
bool a;
bool dispatch, abandon;
List<Level2> sample2data = new List<Level2>();
// private Sample2 sampleval;
public Level1(bool value, bool disp, bool aban, List<Level2> val)
{
a = value;
dispatch = disp;
abandon = aban;
sample2data = val;
}
public bool Status
{
get { return a; }
set { a = value; OnPropertyChanged("A"); }
}
public bool Dispatch
{
get { return dispatch; }
set
{
dispatch = value;
sample2data.ForEach(item => item.SampleA = false);
OnPropertyChanged("Dispatch");
}
}
public bool Abandon
{
get { return abandon; }
set { abandon = value; sample2data.ForEach(item => item.SampleB = true); OnPropertyChanged("Abandon"); }
}
public List<Level2> Sample2
{
get { return sample2data; }
set
{
sample2data = value; OnPropertyChanged("Sample2");
}
}
public void OnPropertyChanged(string name)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
public event PropertyChangedEventHandler PropertyChanged;
}
public class Level2 : INotifyPropertyChanged
{
public Level2()
{
}
public bool _a, _b;
public bool SampleA
{
get { return _a; }
set { _a = value; OnPropertyChanged("SampleA"); }
}
public bool SampleB
{
get { return _b; }
set { _b = value; OnPropertyChanged("SampleB"); }
}
public bool SampleC
{
get;
set;
}
public void OnPropertyChanged(string name)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
public event PropertyChangedEventHandler PropertyChanged;
}
class Data
{
public List<Level1> level1Data = new List<Level1>();
public List<Level2> level2Data = new List<Level2>();
public List<Level1> Level1Data
{
get { return level1Data; }
set { level1Data = value; }
}
public List<Level2> Level2Data
{
get { return level2Data; }
set { level2Data = value; }
}
public Data()
{
for (int i = 0; i < 5; i++)
{
var newLevel2data = new Level2
{
SampleC = false
};
level2Data.Add(newLevel2data);
}
for (int i = 0; i < 5; i++)
{
level1Data.Add(new Level1(false, false, false, level2Data));
}
}
}
Et voici le code de chargement de source de données pour DataGridView
.
BindingSource bindingSource = new BindingSource();
bindingSource.DataSource = new Data();
this.dataGridView1.DataSource = bindingSource;
this.dataGridView1.DataMember = "Level1Data";
et moi avons aussi une question, Lorsque vous travaillez avec les données de propriété complexes DataGridView
, je l'ai mis en œuvre INotifyPropertyChanged
de notifier les modifications de propriétés à la source de données liée de la grille. Bien que la table enfant ne soit pas visible, j'ai modifié certaines valeurs de propriété des propriétés de classe enfant, l'événement PropertyChanged
pour la classe enfant est toujours null, donc la propriété modifiée n'est pas notifiée. Mais pour la classe parente, la propriété modifiée est toujours notifiée.
Pour résoudre le PropertyChanged
devient null pour la classe enfant, j'ai accroché l'événement PropertyChanged
pour les données de classe enfant, tout en créant des valeurs pour la liste de table enfant. Par ce biais, les propriétés sont notifiées correctement.
Voici ma question est, Y at-il une raison spécifique ou une nécessité de hooker l'événement PropertyChanged pour la classe enfant? Parce qu'aucun raccordement n'est fait pour les propriétés de classe de niveau parent. et comment afficher la table enfant dans DataGridView
avec ma source de données?
S'il vous plaît laissez-moi savoir la nécessité d'accrocher l'événement PropertyChanged
.