C# DataGridView';绑定的源代码更新?
当我第一次开始从事这个项目时,我从来没有使用过任何.NET,更不用说C#或WinForms了,所以如果我所做的任何事情让你流泪,请让我知道这个设置的最佳实践是什么 我在做一个排程系统。我将事件保存在数据库中,并将这些事件从web服务获取到主列表中,供应用程序使用。此事件类包含活动列表(列表):C# DataGridView';绑定的源代码更新?,c#,winforms,list,datagridview,bindingsource,C#,Winforms,List,Datagridview,Bindingsource,当我第一次开始从事这个项目时,我从来没有使用过任何.NET,更不用说C#或WinForms了,所以如果我所做的任何事情让你流泪,请让我知道这个设置的最佳实践是什么 我在做一个排程系统。我将事件保存在数据库中,并将这些事件从web服务获取到主列表中,供应用程序使用。此事件类包含活动列表(列表): [全局类] public List Events=Service.GetEvents(); 我有一个显示事件的DataGridView和第二个显示事件活动的DataGridView。我还有一个“保存”按
[全局类]
public List Events=Service.GetEvents();
我有一个显示事件的DataGridView和第二个显示事件活动的DataGridView。我还有一个“保存”按钮,只有在事件以任何方式发生更改时才会启用。我是这样设置的:
[EventsView form]
BindingSource eventsBindingSource = new BindingSource();
BindingSource activitiesBindingSource = new BindingSource();
List<Event> events = new List<Event>(Global.Events.ToList());
eventsBindingSource.DataSource = events;
activitiesBindingSource.DataSource = ((Event)eventsBindingSource.Current).Legs //updated when clicked on new row.
eventsDataGridView.DataSource = eventsBindingSource;
activitiesDataGridView.DataSource = activitiesBindingSource;
[事件视图表单]
BindingSource事件BindingSource=新BindingSource();
BindingSource活动BindingSource=新BindingSource();
列表事件=新列表(Global.events.ToList());
eventsBindingSource.DataSource=事件;
activitiesBindingSource.DataSource=((事件)eventsBindingSource.Current)。腿//在单击新行时更新。
eventsDataGridView.DataSource=eventsBindingSource;
activitiesDataGridView.DataSource=activitiesBindingSource;
我将其设置为,当AvTiveSiesDataGridView上的CellValue更改时,它将检查activitiesBindingSource.Current,在原始的Global.Events列表中查找该事件的活动,如果它不同,它将启用“保存”按钮
但是,当我检查值是否不同时,瞧,Global.Events列表已经更新,即使BindingSource被设置为Events列表,它是该列表的副本
BindingSource有这样的功能吗?如果列表是副本,它也会更新原始列表吗
我不希望它自动更新并保存它的原因是,当用户单击“仅保存”时,我可以更新web服务
我还尝试了以下方法:
- 使(复制)事件列表成为绑定列表
- 逐个从全局列表复制事件
- 绕过BindingSource并将DGV的数据源设置为列表
感谢您的帮助,如果您需要更多详细信息,请告诉我。当数据绑定到DataGridView时,DGV不太关心事件存储在什么位置。无论您是使用原始(全局)事件列表,还是手动复制该列表,事实上事件对象始终是相同的,因此,当用户(通过DGV)进行更改时,原始事件会更改 实施这种“节约”模式的一种方法是:
我尝试过这样做,但问题依然存在。我想我可能隐藏了一些东西,因为这个表单的代码非常广泛。当所选事件发生变化时,我会重置数据源。我将尝试将其分为控制器和视图,看看是否可以找到问题所在。非常感谢你的建议,不过,我会保留克隆列表作为一个很好的预防措施。
[EventsView form]
BindingSource eventsBindingSource = new BindingSource();
BindingSource activitiesBindingSource = new BindingSource();
List<Event> events = new List<Event>(Global.Events.ToList());
eventsBindingSource.DataSource = events;
activitiesBindingSource.DataSource = ((Event)eventsBindingSource.Current).Legs //updated when clicked on new row.
eventsDataGridView.DataSource = eventsBindingSource;
activitiesDataGridView.DataSource = activitiesBindingSource;