在DataGridView底部實現統計行

2022-01-31 05:10:29 字數 2932 閱讀 6127

在開發乙個基於window form的cs應用程式的時候,我搜尋過乙個這樣的datagridview 控制項,它能顯示一列內容的總和。例如:統計顧客訂單的總數,顯示在grid中的一列上。就像excel能做的一樣,我沒有找到乙個合適的解決方案,所以我決定自己開發乙個元件。它能像datagridview一樣工作,能在**的底部顯示一行。

為了summaryrow的重新定位和大小的調整,我重構了一些**,**借用了robert rhode寫的nice filterable datagrid。

非常好的datagridview和window-forms類庫的知識有助於你定製**,但是它不是必要的。因為使用summarydatagridview 非常的簡單。

summarydatagridview 能像任何其他windows-forms 控制項一樣使用。支援設計時的設定。在設計上,它有一組公共屬性。使用類似datagridview ,因為它是繼承了datagridview。為了顯示資料,需要設定控制項的datasource 屬性。每一列必須新增到字串陣列summarycolumns中。看圖1和圖2的公有屬性,看他們是如何影響summarydatagridview的。

使用datagridview 的一行作為總結行是一件非常棘手的事情,會帶來很多問題。我沒有找到在**的底部固定summaryrow的解決方案,它又必須是滾動的。由於這個原因,我使用乙個帶textboxe的簡單控制項,它顯示在datagridview的下面。所有的textbox和datagridview一起改變自己的大小。此外它必須利用自己的水平滾動條將顯示在我們的summarycontrolcontainer下面,而不是使用顯示在summaryrow上面的datagridview的水平滾動條。因此有相當一部分的**是處理summaryrow的定位、大小、排序的。總結一行的值是控制項中最容易實現的部分。下面的datagridview事件的處理是為了使datagridview和summaryrow同步:

columnadded, columnremoved, columnstatechanged, columndisplayindexchanged

summaryrow 和datagridview粘合:

如何將summaryrow 附加到datagridview上面。最簡單的方式是使用乙個控制項將summaryrow 和datagridview包含在其中。通過乙個公共屬性在**之間訪問。我決定讓datagridview建立自己的summaryrow。為了避免設計時出現的問題,我們在執行時完成。在datagridview 初始化之後,呼叫changeparent()方法。這個方法從父控制項移除datagridview ,在這個地方建立乙個panel,然後在這個panel中包含datagridview 和summaryrow 。在移除datagridview之前,我們必須在tablelayoutpanel上確定確切位置。

**private

void

changeparent()

else

summarycontrol.controls.add(hscrollbar);

hscrollbar.bringtofront();

panel.controls.add(

this

);panel.controls.add(summarycontrol);

adjustsumcontroltogrid();

adjustscrollbartosummarycontrol();

resizehscrollbar();                }}

唯讀的textbox:

乙個標準的windows窗體textbox,使其readonly屬性設定為true 主要問題是,認為該文字框顏色更改為caption(灰),不能設定其他的顏色。我想讓summaryrow 的背景顏色是純白色。這就是為什麼我要包括我自己的textbox。這是乙個簡單的控制項,因為在textbox中沒有eventhandling。textbox能獲得issummary屬性來表明是否用來合總。直接在onpaint事件中繪製控制項。

**protected

override

void

onpaint(painteventargs e)

}在公共屬性sumaryrowbackcolor中設定summaryrow的顏色

實際是在calcsummaries()方法中統計列值,這個方法在 datagridview的 [rowsadded] [rowsremoved] 和[cellvaluechanged] 事件處理中呼叫。 它通過遍歷datagridview 的每一行在summarycolumn上總計列值

原文:(全文完)

以下為廣告部分

如果您想看下您的**https部署的是否安全,花1分鐘時間來 myssl.com 檢測以下吧。讓您的https**變得更安全!

ssl檢測評估

快速了解https**安全情況。

安全評級(a+、a、a-...)、行業合規檢測、證書資訊檢視、證書鏈資訊以及補完、伺服器套件資訊、證書相容性檢測等。

ssl證書工具

安裝部署ssl證書變得更方便。

ssl漏洞檢測

讓伺服器遠離ssl證書漏洞侵擾

tls robot漏洞檢測、心血漏洞檢測、freak attack漏洞檢測、ssl poodle漏洞檢測、ccs注入漏洞檢測。

讓底部始終在瀏覽器底部

當內容不足夠高時,使footer始終處於底部,其中一種方法 html div class div class content content div div class push div div footer class footer footer css樣式 footer,push.footer ...

在datagridview中新增button按鈕

net的datagridview控制項中,提供了一種列的型別,叫 datagridviewbuttoncolumn 這種列型別是展示為乙個 按鈕,可以給button賦予相應的text,並且,此button可以用來做處理事件的判斷依據。datagridviewbuttoncolumn,雖然在ui展現上...

在DataGridView中新增行號

這裡提到了兩種方法 一 在資料載入後,用下面的 1for inti 0 i datagridview1.rows.count i 2datagridview1.autoresizerowheaderswidth datagridviewrowheaderswidthsizemode.autosize...