DataGridView设置的DataSource后修改列内容无效

                this.dgv_main.DataSource = lst;
                foreach (DataGridViewRow drow in dgv_main.Rows)
                {
                    D_Renyuan ren = (D_Renyuan)drow.DataBoundItem;
                    drow.Cells["col_tequan"].Value = EnumHelper.GetEnumName<MJTequan>(ren.Tequan) + "卡";
                    drow.Cells["col_shoufei"].Value = ren.isShoufei ? "收费卡" : "时段卡";
                }

貌似没啥问题,但是onload的时候不能正确修改数据。click时候同样的写法能够加载数据。目前解决办法是放到dgv_main_DataBindingComplete事件里面。

C# 中,当使用 DataGridView 设置 DataSource 后,DataGridView 会自动更新显示的内容,前提是 DataSource 的数据源支持实时刷新或改变。然而,直接在运行时更改 DataGridViewDataSource 可能不会立即反映到界面,原因可能有以下几点: 1. DataSource 更新延迟:默认情况下,DataGridView 会在 DataSource 的更改事件(如 DataSourceChanged 或 RowCollectionChanged)触发后更新视图,这可能有一定的时间延迟,特别是在处理大量数据时。 2. VirtualMode:如果 DataGridView 在 VirtualMode 下工作,它并不会创建所有数据项的实例,而是在需要时动态加载。这时,你需要手动触发 DataAdapter 的 Fill 方法或者 DataGridView 的 Refresh 方法来更新视图。 3. 绑定模式(BindingSource):如果通过 BindingSource 将 DataSourceDataGridView 进行绑定,那么对 BindingSource 的更改才会直接影响 DataGridView。确保 BindingSource 已经更新了。 4. DataSource 属性不可见:某些控件,比如 Entity Framework 自动生成的对象,其 DataSource 属性可能是只读的,这种情况下无法直接修改。 解决办法通常是显式地更新 DataGridView,例如: ```csharp dataGridView.DataSource = newDataSource; // 新的数据源 dataGridView.Refresh(); // 刷新显示 // 或者 ((BindingSource)dataGridView.DataSource).DataChanged = true; // 如果使用 BindingSource ``` 另外,为了确保即时显示,也可以尝试在更改 DataSource 后监听并处理相应的事件,以便及时更新界面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值