在我的C#(2010)應用程序,我有一個DataGridView在虛擬模式下,它擁有幾千行。目前是否可以找出屏幕上有哪些單元格?如何找出哪些DataGridView行當前在屏幕上?
11
A
回答
25
public void GetVisibleCells(DataGridView dgv)
{
var vivibleRowsCount = dgv.DisplayedRowCount(true);
var firstDisplayedRowIndex = dgv.FirstDisplayedCell.RowIndex;
var lastvibileRowIndex = (firstDisplayedRowIndex + vivibleRowsCount) - 1;
for (int rowIndex = firstDisplayedRowIndex; rowIndex <= lastvibileRowIndex; rowIndex++)
{
var cells = dgv.Rows[rowIndex].Cells;
foreach (DataGridViewCell cell in cells)
{
if (cell.Displayed)
{
// This cell is visible...
// Your code goes here...
}
}
}
}
更新:它現在找到可見的單元格。
1
我還沒有嘗試過這個自己,但在我看來,在確定使用DataGridView.GetRowDisplayRectangle行的矩形,並檢查它是否重疊當前DataGridView.DisplayRectangle將要走的路。 Rectangle.IntersectsWith對此很有用。
作爲一個優化,我會使用DataGridView .DisplayedRowCount找到第一個可見行後確定哪些行是可見的。
這正是我所需要的!謝謝。 – Seidleroni 2011-05-18 15:35:10
ATTN:如果網格中有不可見的行,則不能計算lastvibileRowIndex。在這種情況下,你必須在for循環中檢查行的Visible屬性,並對這些可見行進行計數,直到達到vivibleRowsCount。 – 2014-07-07 12:48:41