我需要強制DataGridView
顯示選定的row
。如何使DataGridView顯示選定的行?
總之,我有一個textbox
,根據輸入到textbox
的內容更改DGV
選擇。發生這種情況時,選擇將更改爲匹配row
。
不幸的是,如果選擇的row
不在視圖中,我必須手動向下滾動才能找到選擇。有誰知道如何強制DGV
顯示選定的row
?
謝謝!
我需要強制DataGridView
顯示選定的row
。如何使DataGridView顯示選定的行?
總之,我有一個textbox
,根據輸入到textbox
的內容更改DGV
選擇。發生這種情況時,選擇將更改爲匹配row
。
不幸的是,如果選擇的row
不在視圖中,我必須手動向下滾動才能找到選擇。有誰知道如何強制DGV
顯示選定的row
?
謝謝!
您可以設置:
dataGridView1.FirstDisplayedScrollingRowIndex = dataGridView1.SelectedRows[0].Index;
下面是這個屬性的MSDN documentation。
謝謝!我一直在努力尋找我的邏輯錯誤,因爲我使用的CurrentCell並不普遍。但是我可以將我一直使用的行號插入到這裏,它的功能就像一個魅力! – clweeks
簡單和完美(y) –
只要把該行的選擇行後:
dataGridView1.FirstDisplayedScrollingRowIndex = dataGridView1.SelectedRows[0].Index;
錯過了一分鐘! –
int rowIndex = -1;
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (row.Cells[0].Value.ToString().Equals(searchString))
{
rowIndex = row.Index;
break;
}
}
if (rowIndex >= 0)
{
dataGridView1.CurrentCell = dataGridView1[visibleColumnIndex, rowIndex];
}
visibleColumnIndex - 所選單元格必須是可見
做這樣的事情:
dataGridView1.CurrentCell = dataGridView1.Rows[index].Cells[0];
如果第一列是可見的纔有效。如果它被隱藏,你會得到一個異常。這是更安全:
var column = dataGridView1.CurrentCell != null ? dataGridView1.CurrentCell.ColumnIndex : dataGridView1.FirstDisplayedScrollingColumnIndex; dataGridView1.CurrentCell = dataGridView1.Rows[iNextHighlight].Cells[column];
這將重置選擇不滾動,如果目標行已經在屏幕上。它還保留當前列選擇,這在您允許內聯編輯的情況下很重要。
我做了下一個搜索功能,它適用於在顯示中滾動選擇。
private void btnSearch_Click(object sender, EventArgs e)
{
dataGridView1.ClearSelection();
string strSearch = txtSearch.Text.ToUpper();
int iIndex = -1;
int iFirstFoundRow = -1;
bool bFound = false;
if (strSearch != "")
{
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
/* Select All Rows Starting With The Search string in row.cells[1] =
second column. The search string can be 1 letter till a complete line
If The dataGridView MultiSelect is set to true this will highlight
all found rows. If The dataGridView MultiSelect is set to false only
the last found row will be highlighted. Or if you jump out of the
foreach loop the first found row will be highlighted.*/
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if ((row.Cells[1].Value.ToString().ToUpper()).IndexOf(strSearch) == 0)
{
iIndex = row.Index;
if(iFirstFoundRow == -1) // First row index saved in iFirstFoundRow
{
iFirstFoundRow = iIndex;
}
dataGridView1.Rows[iIndex].Selected = true; // Found row is selected
bFound = true; // This is needed to scroll de found rows in display
// break; //uncomment this if you only want the first found row.
}
}
if (bFound == false)
{
dataGridView1.ClearSelection(); // Nothing found clear all Highlights.
}
else
{
// Scroll found rows in display
dataGridView1.FirstDisplayedScrollingRowIndex = iFirstFoundRow;
}
}
}
這是我使用的一個。 – Mac
也考慮這個代碼(使用從competent_tech建議的方式):
private static void EnsureVisibleRow(DataGridView view, int rowToShow)
{
if (rowToShow >= 0 && rowToShow < view.RowCount)
{
var countVisible = view.DisplayedRowCount(false);
var firstVisible = view.FirstDisplayedScrollingRowIndex;
if (rowToShow < firstVisible)
{
view.FirstDisplayedScrollingRowIndex = rowToShow;
}
else if (rowToShow >= firstVisible + countVisible)
{
view.FirstDisplayedScrollingRowIndex = rowToShow - countVisible + 1;
}
}
}
請注意,設置FirstDisplayedScrollingRowIndex當你的DataGridView未啓用將滾動列表所需的行,但滾動條不會反映其位置。最簡單的解決方案是重新啓用和禁用DGV。
dataGridView1.Enabled = true;
dataGridView1.FirstDisplayedScrollingRowIndex = index;
dataGridView1.Enabled = false;
//這工作,它是區分大小寫的,並認爲搜索
private bool FindInGrid(string search)
{
bool results = false;
foreach (DataGridViewRow row in dgvData.Rows)
{
if (row.DataBoundItem != null)
{
foreach (DataGridViewCell cell in row.Cells)
{
if (cell.Value.ToString().Contains(search))
{
dgvData.CurrentCell = cell;
dgvData.FirstDisplayedScrollingRowIndex = cell.RowIndex;
results = true;
break;
}
if (results == true)
break;
}
if (results == true)
break;
}
}
return results;
}
只需設定CurrentCell屬性,則DGV將滾動,以使其可見的第一次出現。 –