![](/img/trans.png)
[英]How to adjust vertical scroll position of DataGridView to show entire last row after changing its height?
[英]The datagridview vertical scrollbar loses its value after I delete a row
我有一個帶有數據表的 datagridview 作為 tabcontrol 內的數據源。 我用 10 行數據加載數據表,然后設置數據源。 每當我從 datagridview 或數據源數據表中刪除一行時,datagridview 上的垂直滾動條就會丟失其設置。 我從數據表中嘗試過:
DataTable dataTableCopy = ((DataSet)dgvFeedItems.DataSource).Tables[0];
for (int i = 0; i < dataTableCopy.Rows.Count - 1; i++)
{
if (dataTableCopy.Rows[i][0].ToString() == FeedItemID.ToString())
{
dataTableCopy.Rows[i].Delete();
break;
}
}
dataTableCopy.AcceptChanges();
我直接從網格中嘗試過:
foreach (DataGridViewRow dgvrFeedItem in dgvFeedItems.Rows)
{
if (dgvrFeedItem.Cells[1].Value.ToString().Equals(FeedItemID.ToString()))
{
dgvFeedItems.Rows.Remove(dgvrFeedItem);
break;
}
}
兩種方法的結果都是一樣的。
前:
后:
在這兩種情況下,表格都有正確的行數,但垂直滾動條消失了。 TY 的任何建議和幫助。
嘗試view.BindingContext = new BindingContext();
重置垂直滾動條范圍對我有用。
我無法找出它無法正常運行的原因,但我確實找到了解決方法,以防其他人遇到此問題。 基本上從 DataTable 中刪除行后,datagridview 內的垂直滾動條被禁用。 因此,作為一種解決方法,我在 datagridview 中找到了垂直滾動條控件,存儲其位置,更新數據表,重新啟用垂直滾動條,然后重新定位垂直滾動條,因為它的設置在禁用時丟失了。
VScrollBar vsbFeedGrid = null;
// The vscrollbar index is 1 in this.dgvFeedItems.Controls but I loop in case it isnt always in that position
foreach (Control control in this.dgvFeedItems.Controls)
{
if (control is VScrollBar)
{
vsbFeedGrid = (VScrollBar)control;
break;
}
}
if (vsbFeedGrid != null)
{
int intCurrentVPosition = vsbFeedGrid.Value; // Store current scroll position
DeleteItemFromFeedGrid(lngFeedItemID); // Update datatable
vsbFeedGrid.Enabled = true; //Re-enable the vertical scrollbar
if (intCurrentVPosition > vsbFeedGrid.Maximum) //Re-position the vertical scrollbar
{
vsbFeedGrid.Value = vsbFeedGrid.Maximum; // In case it was the last record deleted
}
else
{
vsbFeedGrid.Value = intCurrentVPosition;
}
}
對先前答案的一些代碼改進:
foreach(var sb in grid.Controls.OfType<ScrollBar>())
{
int intCurrentPosition = sb.Value;
sb.Enabled = true;
if (intCurrentPosition > sb.Maximum)
sb.Value = sb.Maximum;
else
sb.Value = intCurrentPosition;
}
適用於兩個滾動條
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.