13

私の C# (2010) アプリケーションには、数千行を保持する仮想モードの DataGridView があります。現在画面に表示されているセルを特定することはできますか?

4

3 に答える 3

34
public void GetVisibleCells(DataGridView dgv)
    {
        var visibleRowsCount = dgv.DisplayedRowCount(true);
        var firstDisplayedRowIndex = dgv.FirstDisplayedCell.RowIndex;
        var lastvisibleRowIndex = (firstDisplayedRowIndex + visibleRowsCount) - 1;
        for (int rowIndex = firstDisplayedRowIndex; rowIndex <= lastvisibleRowIndex; rowIndex++)
        {
            var cells = dgv.Rows[rowIndex].Cells;
            foreach (DataGridViewCell cell in cells)
            {
                if (cell.Displayed)
                {
                    // This cell is visible...
                    // Your code goes here...
                }
            }
        }
    }

更新: 可視セルが検出されるようになりました。

于 2011-05-18T13:39:59.683 に答える
1

私はこれを自分で試したことはありませんが、DataGridView.GetRowDisplayRectangle を使用して行の四角形を決定し、それが現在のDataGridView.DisplayRectangleと重なるかどうかを確認するのがよいと思われます。Rectangle.IntersectsWithは、こ​​れを行うのに役立ちます。

最適化として、最初に表示される行を見つけた後にDataGridView .DisplayedRowCountを使用して、どの行が表示されるかを判断します。

于 2011-05-18T13:26:54.520 に答える