Grz*_*rzM 5 c# datagridview winforms
我有datagridview,DataSource设置为myBindingList.列表项目实现INotifyPropertyChanged,因此datagridview自动响应列表中的更改.
现在我必须计算一些datagridview列的摘要.
它应该在以下时间完成:
第一个很清楚,但第二个问题我遇到了一个小问题.
当用户通过控制或更改时更改单元格的值时,将触发OnCellValueChanged:
myDataGridView.Rows[x].Cells[y].Value=newValue;
Run Code Online (Sandbox Code Playgroud)
但是关于:
myBindingList[myInvoice].Property1=newValue;
Run Code Online (Sandbox Code Playgroud)
DataGridView会自动刷新(INotifyPropertyChanged),但它不会触发OnCellValueChanged事件.
知道如何从我的DataGridView获取此类信息?它必须在DataGridView级别上完成,因为我正在编写自己的控件,扩展了dgv.
谢谢您的帮助.
我能想到的解决此问题的最佳方法是使用 BindingSource 作为数据源,然后在自定义 DataGridView 中引发您自己的事件以响应该BindingSource.ListChanged事件。
我可能会OnDataSourceChanged用这样的东西覆盖:
public event EventHandler CustomCellValueChanged;
protected override void OnDataSourceChanged(EventArgs e)
{
bs = this.DataSource as BindingSource;
if (bs == null)
{
throw new ArgumentException("DataSource must be a BindingSource");
}
bs.ListChanged += new System.ComponentModel.ListChangedEventHandler(bs_ListChanged);
base.OnDataSourceChanged(e);
}
void bs_ListChanged(object sender, System.ComponentModel.ListChangedEventArgs e)
{
if (CustomCellValueChanged != null)
{
CustomCellValueChanged(this, new EventArgs());
}
}
Run Code Online (Sandbox Code Playgroud)
问题在于,(我能想到的)无法获得正确的单元格属性,因此您必须重新评估所有列,而不仅仅是包含更改的列。
| 归档时间: |
|
| 查看次数: |
3321 次 |
| 最近记录: |