博主這幾天就准備離職了,以后不再做.Net開發。因此這應該是我寫的最后一篇關於dev控件的博文。既然是最后一篇,那就寫的具體一些。畫個圓滿的省略號......
本文介紹gridcontrol怎樣實現復選框功能。網上有幾篇這種文章,但功能不夠完好,按它做的還有問題。因此我就具體的介紹我的一下實現方法供大家參考。
首先看下我的gridcontrol(因為數據部分涉及到項目的保密內容。所以呆會的實現效果就不上圖了):

我這里有一個選擇某行后,將改行的班級名字顯示在上面的文本框的功能,全選則所有顯示。
各個控件的name:
班級文本框:barEditClass
全選復選框:checkEditAll
表格復選框:checkEditClass
表格控件:gcSelectClass、gvSelectClass
以下介紹具體的實現方法:
第一步:拖一個gridcontrol控件,點擊最后一列,選擇columEdit屬性,在彈出的下拉框中選擇checkbox控件,就可以在表格的最后一列顯示復選。
第二步:拖一個checkEdit控件,放在表格的最后一列的列頭作為全選復選框,可是你會發現執行時這個復選框的位置是偏的。也就是不在列頭上,以下解決問題,選中checkEditAll控件,將其Anchor屬性設為Top, Right,再選中復選框列,將MinWidth和MaxWidth屬性的值設為Width的屬性值(我這里是104),再次執行。你會發現復選框列的大小不能改變了。全選復選框也就老老實實地呆在列頭上。
第三步:綁定數據源。我這里用的數據源是自己定義的實體類,前面的幾列放在一個字段中。后面的復選框列放在一個單獨的字段。
當然你用datatable的話也是一樣的道理。
在數據源中加入一個“check”字段,類型為bool,然后將表格的復選框列的fieldname字段設為”check“。成功綁定數據源
第四步:這一步實現選中復選框后將該行的班級名稱顯示在上面的班級文本框上。
找到checkEditClass控件,在該控件的事件中創建CheckedChanged事件(選中狀態改變后觸發該事件)。
以下看代碼(為了防止程序崩潰,最好加上try...catch):
//顯示班級
gvSelectClass.CloseEditor();
gvSelectClass.UpdateCurrentRow();
string name = gvSelectClass.GetRowCellValue(gvSelectClass.FocusedRowHandle, gvSelectClass.Columns[1]).ToString();
string value = gvSelectClass.GetRowCellValue(gvSelectClass.FocusedRowHandle, gvSelectClass.Columns[4]).ToString();
//添加班級
if (value == "True")
{
if (m_className.IndexOf(name) > -1)
{
}
else
{
if (m_className == "")
{
m_className += name;
}
else
{
m_className += ",";
m_className += name;
}
}
}
//去掉班級
else
{
if (m_className.IndexOf(name) > -1)
{
string[] classNames = m_className.Split(',');
if (classNames[0] == name)
{
m_className = m_className.Replace(name + ",", "");
}
else
{
m_className = m_className.Replace("," + name, "");
}
}
}
barEditClass.EditValue = m_className;
我們一行一行的來看代碼,前兩行是在改變復選框狀態后更新數據源。可不要小瞧它們,這兩行代碼是不可缺少的。假設不用會導致復選框狀態不能及時更新到數據源,進而導致錯誤結果。第三行和第四行用來獲取選中的復選框所在行的復選框狀態和班級名稱,之后的代碼添加班級和去掉班級的。班級之間以逗號間隔,這里我定義了一個全局變量m_className,相信大家都看得懂。最后一行代碼即將要顯示的班級名字顯示在文本框barEditClass上面。
第五步:實現全選和所有取消功能。選中checkEditAll控件。在控件事件中創建CheckedCh
