• 关于DataGridView的ClearSelection方法


    最近做winform项目,遇到一个问题。  纠结了几天,最终解决了,记录一下!

    新建一个Form窗体,拽一个DataGridView上去,然后写一个方法

    private void BindData()

    {

    DataTable dt = xxxxxxx;
    dgvFormDetail.AutoGenerateColumns = false;
    dgvFormDetail.DataSource = dt;
    dgvFormDetail.ClearSelection();

    }

    调用dgvFormDetail.ClearSelection();,本意是清除所有数据行的选中状态,让数据绑定之后不要有任何的默认选中。

    把BindData放在页面的构造方法里面

    public QingLingForm()
    {
    InitializeComponent();
    BindData();
    }

    结果发现加载出来的数据行的第一行依然是蓝色的选中状态的颜色。  貌似dgvFormDetail.ClearSelection();这句没起作用?

    搜索网上发现好多人也遇到了这个问题,解决方案五花八门。

    其中stackoverflow上面有个帖子,有个人的留言提醒了我

    https://stackoverflow.com/questions/5960897/remove-blue-colored-row-from-datagridview-winforms

    大意是这个ClearSelection();方法必须是当你的datagirdview在展示状态时才有效,

    那就是说问题出在加载顺序上了!!!

    BindData放在构造方法里面,可能执行的时候DataGridView还没绘制完成,调用ClearSelection当然不会起作用!!!

    那么BindData放在哪里合适呢,有两种方式:

    可以重写Form的protected virtual void OnLoad(EventArgs e);方法,

    overide这个方法,然后把BindData放到这里面,可以!

    protected override void OnLoad(EventArgs e)
    {
         BindData();
    }

    还可以给Form指定Load事件的方法,把BindData()放到Form_Load里面

    private void Form_Load(object sender, EventArgs e)
    {
    BindData();
    }

    两个方法其实是一样的,不同方式而已,并且程序只会执行其中一个。  一旦override了OnLoad事件,Form_Load就不会执行了。

  • 相关阅读:
    快使用阿里云的maven仓库
    谈谈对MVC、MVP和MVVM的理解
    [个人项目] 使用 Vuejs 完成的音乐播放器
    手把手教你封装 Vue 组件并使用 NPM 发布
    Chrome 的 Material Design Refresh UI初探
    Vue图片懒加载插件
    手淘的移动端适配方案flexible
    css 实现元素长宽等比缩放
    css 中 stick footer 布局实现
    页面滚动插件 better-scroll 的用法
  • 原文地址:https://www.cnblogs.com/qfl-blog/p/9956843.html
Copyright © 2020-2023  润新知