DataGridView 跳到指定選取行
在使用 DataGridView 時,除了利用滑鼠控制捲軸來切換所選取的資料,或是直接使用上下鍵來移動選取行。
但還是有某些時後需要透過程式來控制目前所選取的行資料,為了不要一再重複的撰寫相同的程式,因此就改為共用程式的方式。
當然前提這個 DataGridView 的選取模式必需要設定為單選!
名稱定義為 JumpToRecord,動作目標為 DataGridView 控制項,動作模式設定為四種。
0:跳到第一筆、1:跳到上一筆、2:跳到下一筆、3:跳到最後一筆
另外設定了一個開關,來判斷選取行是否一定在顯示行當中。(當然預設為是)
public static void JumpToRecord(ref DataGridView __TargetView, int __JumpType, bool __bolCheckDisplay = true)
{
int intCurrentIndex = -1;
int intFirstIndex = __TargetView.FirstDisplayedScrollingRowIndex;
if (__TargetView.SelectedRows.Count == 1) intCurrentIndex = __TargetView.SelectedRows[0].Index;
switch (__JumpType)
{
case 0:
if (intCurrentIndex != 0)
{
__TargetView.Rows[0].Selected = true;
__TargetView.FirstDisplayedScrollingRowIndex = 0;
}
break;
case 1:
if (intCurrentIndex == 0) return;
__TargetView.Rows[intCurrentIndex - 1].Selected = true;
if ((!__TargetView.SelectedRows[0].Displayed) && __bolCheckDisplay)
{
__TargetView.FirstDisplayedScrollingRowIndex = __TargetView.SelectedRows[0].Index;
}
break;
case 2:
if ((intCurrentIndex + 1) >= __TargetView.Rows.Count) return;
__TargetView.Rows[intCurrentIndex + 1].Selected = true;
if (__bolCheckDisplay)
{
if (!__TargetView.SelectedRows[0].Displayed)
{
__TargetView.FirstDisplayedScrollingRowIndex = __TargetView.SelectedRows[0].Index - __TargetView.DisplayedRowCount(false);
}
if ((__TargetView.DisplayedRowCount(true) != __TargetView.DisplayedRowCount(false)) &&
((intCurrentIndex + 2 - __TargetView.FirstDisplayedScrollingRowIndex) == __TargetView.DisplayedRowCount(true)))
{
__TargetView.FirstDisplayedScrollingRowIndex = __TargetView.FirstDisplayedScrollingRowIndex + 1;
}
}
break;
case 3:
if ((intCurrentIndex + 1) >= __TargetView.Rows.Count) return;
__TargetView.Rows[__TargetView.Rows.Count - 1].Selected = true;
if (__bolCheckDisplay)
{
if ((__TargetView.Rows.Count - __TargetView.DisplayedRowCount(false) - 1) < 0)
{
__TargetView.FirstDisplayedScrollingRowIndex = 0;
}
else
{
__TargetView.FirstDisplayedScrollingRowIndex = __TargetView.Rows.Count - __TargetView.DisplayedRowCount(false) - 1;
}
if ((__TargetView.DisplayedRowCount(true) != __TargetView.DisplayedRowCount(false)) &&
((__TargetView.Rows.Count - __TargetView.FirstDisplayedScrollingRowIndex) == __TargetView.DisplayedRowCount(true)))
{
__TargetView.FirstDisplayedScrollingRowIndex = __TargetView.FirstDisplayedScrollingRowIndex + 1;
}
}
break;
default:
return;
}
}
如此一來就可以快速的應用在任何一個 DataGridView 上了!
程式是運氣與直覺堆砌而成的奇蹟。
若不具備這兩者,不可能以這樣的工時實現這樣的規格。
修改規格是對奇蹟吐槽的褻瀆行為。
而追加修改則是相信奇蹟還會重現的魯莽行動。