關於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就不會執行了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM