DataGridView将不能正确更新
本文关键字:更新 不能 DataGridView | 更新日期: 2023-09-27 18:05:04
所以我目前正在做一个数据库项目,但我的GUI不会正确更新。
我的程序目前有四个DataGridViews。第一个包含了所有的波段。第二个显示所选乐队的所有乐队成员。第三个显示所选乐队的所有专辑。第四个显示所选专辑的所有曲目。
当我在两个乐队之间切换时,乐队成员和专辑更新得很好。但这是我的问题:
我有两条带子。第一个在每个表中已经有几个条目。第二个只有乐队本身。
所以当我从波段1切换到波段2时,轨道DataGridView没有正确更新,仍然显示第一张专辑的轨道。就像我说的,其余的更新得很好。
下面是我的代码:public partial class Form1 : Form
{
MusicDB Context = new MusicDB();
BindingSource bsSourceAlbum = new BindingSource();
BindingSource bsSourceMember = new BindingSource();
BindingSource bsSourceTrack = new BindingSource();
public Form1()
{
InitializeComponent();
this.AlbumDataGridView.AutoGenerateColumns = false;
this.MemberDataGridView.AutoGenerateColumns = false;
this.TrackDataGridView.AutoGenerateColumns = false;
}
private void Form1_Load(object sender, EventArgs e)
{
Context.cInterpret.Load();
BindingSource bsSourceInterpret = new BindingSource();
bsSourceInterpret.DataSource = Context.cInterpret.Local;
InterpretDataGridView.DataSource = bsSourceInterpret;
InterpretDataGridView.Columns[0].Visible = false;
InterpretDataGridView.Columns[3].Visible = false;
InterpretDataGridView.Columns[4].Visible = false;
InterpretDataGridView.Columns["InterpretName"].HeaderText = "Interpret";
InterpretDataGridView.Columns["InterpretFounding"].HeaderText = "Gründungsjahr";
bsSourceInterpret.AllowNew = true;
Context.cLabel.Load();
AlbumLabelColumn.DataSource = Context.cLabel.Local;
AlbumLabelColumn.DisplayMember = "LabelName";
AlbumLabelColumn.ValueType = typeof(MusicLabel);
AlbumLabelColumn.ValueMember = "Self";
Context.cGenre.Load();
AlbumGenreColumn.DataSource = Context.cGenre.Local;
AlbumGenreColumn.DisplayMember = "GenreName";
AlbumGenreColumn.ValueType = typeof(Genre);
AlbumGenreColumn.ValueMember = "Self";
Context.cInstrument.Load();
MemberInstrumentColumn.DataSource = Context.cInstrument.Local;
MemberInstrumentColumn.DisplayMember = "InstrumentName";
MemberInstrumentColumn.ValueMember = "InstrumentID";
MemberInstrumentColumn.ValueType = typeof(Instrument);
MemberInstrumentColumn.ValueMember = "Self";
bsSourceTrack.AllowNew = true;
bsSourceAlbum.AllowNew = true;
bsSourceMember.AllowNew = true;
AlbumDataGridView.DataSource = bsSourceAlbum;
MemberDataGridView.DataSource = bsSourceMember;
TrackDataGridView.DataSource = bsSourceTrack;
}
private void InterpretDataGridView_SelectionChanged_1(object sender, EventArgs e)
{
//bsSourceMember.Clear();
//bsSourceAlbum.Clear();
DataGridView SenderGridView = (DataGridView)sender;
if (SenderGridView.CurrentRow != null && SenderGridView.CurrentRow.DataBoundItem != null && SenderGridView.CurrentRow.DataBoundItem is Interpret)
{
bsSourceAlbum.DataSource = ((Interpret)((DataGridView)sender).CurrentRow.DataBoundItem).Albums;
bsSourceMember.DataSource = ((Interpret)((DataGridView)sender).CurrentRow.DataBoundItem).Members;
}
}
private void AlbumDataGridView_SelectionChanged(object sender, EventArgs e)
{
bsSourceTrack.Clear();
DataGridView SenderGridView = (DataGridView)sender;
if (SenderGridView.CurrentRow != null && SenderGridView.CurrentRow.DataBoundItem != null && SenderGridView.CurrentRow.DataBoundItem is Album)
{
bsSourceTrack.DataSource = ((Album)((DataGridView)sender).CurrentRow.DataBoundItem).Tracks;
}
}
}
使用DataBind()
方法
InterpretDataGridView.DataBind();
在InterpretDataGridView_SelectionChanged_1
中,您仅为其他3个网格中的2个更新绑定源,并且这些是您报告为更改的网格。
其他网格的绑定源:TrackDataGridView
只从AlbumDataGridView_SelectionChanged
更新-所以尝试在设置bsSourceMember.DataSource
后调用它。
所以我找到了解决问题的方法。这就是我在代码中添加的内容:
bsSourceAlbum.CurrentChanged += bsSourceAlbum_CurrentChanged;
void bsSourceAlbum_CurrentChanged(object sender, EventArgs e)
{
bsSourceTrack.Clear();
BindingSource SenderSource = (BindingSource)sender;
if (SenderSource.Current != null && SenderSource.Current is Album)
{
bsSourceTrack.DataSource = ((Album)((BindingSource)sender).Current).Tracks;
}
}