2011-07-13 58 views
2

我试图让新的行写入我们的数据库时Winforms组合框自动刷新。用Winforms和EF 4.1进行数据绑定代码优先

POCO EF类:

public class BaseSweep 
{ 
    public int BaseSweepId { get; set; } 
    //stuff removed for clarity 
} 

我通过这样一个的BindingList绑定到数据:

public BindingList<BaseSweep> TopSweeps() 
{ 
    LocalDbContext.BaseSweep.Load(); 
    return LocalDbContext.BaseSweep.Local.ToBindingList();      

} 

private void BindSweepList() //called in Form_Load 
{ 
    comboBoxSweepIds.DataSource = _dataAccess.TopSweeps(); 
    comboBoxSweepIds.DisplayMember = "BaseSweepId"; 
    comboBoxSweepIds.ValueMember = "BaseSweepId"; 
} 

也能正常工作的初始绑定,显示当前的ID在该表。随着新行添加到表中,LocalDbContext.BaseSweep.Local中的计数会按预期增加。但是,comboBoxSweepIds永远不会更新。任何想法我做错了什么?

回答

0

马克W的LED我以正确的方式:

//put an event handler on the collection 
public void CollectionChanged<T>(System.Collections.Specialized.NotifyCollectionChangedEventHandler eventHandler) where T : class 
{ 
    LocalDbContext.Set<T>().Local.CollectionChanged += eventHandler; 
} 

使用私人BindingList<T>形式类(_sweepCollection

在第一次数据绑定,成立了事件处理程序:

private void BindSweepList() 
{    
    _sweepCollection = _dataAccess.TopSweeps(); 
    _dataAccess.CollectionChanged<CableSweepDebug>(new System.Collections.Specialized.NotifyCollectionChangedEventHandler(Local_CollectionChanged)); 

    UpdateSweepsData(); 
} 

private void Local_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) 
{ 
    UpdateSweepsData(); 
} 

private void UpdateSweepsData() 
{ 
    if (comboBoxSweepIds.InvokeRequired) 
    { 
     Invoke(new UpdateSweepCount(UpdateSweepsData)); 
    } 
    else 
    { 
     var tmpBind = _sweepCollection.OrderByDescending(t => t.BaseSweepId).Take(100); 

     comboBoxSweepIds.DataSource = null; 
     comboBoxSweepIds.DataSource = tmpBind.ToList() ; 
     comboBoxSweepIds.DisplayMember = "BaseSweepId"; 
     comboBoxSweepIds.ValueMember = "BaseSweepId";     

    } 
} 
0

您需要触发一个事件并在每次添加行时调用绑定。