#c# #datagridview #virtualmode
#c# #datagridview #виртуальный режим
Вопрос:
В моем приложении на C # (2010) у меня есть DataGridView в виртуальном режиме, который содержит несколько тысяч строк. Возможно ли узнать, какие ячейки находятся на экране в данный момент?
Ответ №1:
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...
}
}
}
}
Обновлено: теперь он находит видимые ячейки.
Комментарии:
1. ВНИМАНИЕ: Вы не можете вычислить lastvibileRowIndex подобным образом, если у вас есть невидимые строки в сетке. В таком случае вы должны проверить свойство Visible строки в цикле for и считать эти видимые строки, пока не достигнете vivibleRowsCount.
Ответ №2:
Я сам этого не пробовал, но мне кажется, что правильным решением было бы определить прямоугольник строки с помощью DataGridView.GetRowDisplayRectangle и проверить, перекрывается ли он с текущим DataGridView.DisplayRectangle. Прямоугольник.Для этого полезно использовать IntersectsWith.
В качестве оптимизации я бы использовал DataGridView .DisplayedRowCount после нахождения первой видимой строки, чтобы определить, какие строки видны.
Ответ №3:
private bool RowIsVisible(DataGridViewRow row)
{
DataGridView dgv = row.DataGridView;
int firstVisibleRowIndex = dgv.FirstDisplayedCell.RowIndex;
int lastVisibleRowIndex = firstVisibleRowIndex dgv.DisplayedRowCount(false) - 1;
return row.Index >= firstVisibleRowIndex amp;amp; row.Index <= lastVisibleRowIndex;
}
ИМХО
С уважением
Комментарии:
1. Добро пожаловать в SO. Пожалуйста, объясните, как это добавляет что-либо к принятому ответу от 2011 года и как это относится к комментарию, сделанному к нему в 2014 году о невидимых строках.