ファビオの答えに加えて、私は同じアプローチを実装した私自身の発見を与えたいと思いました。
dgvMainとという2つのDataGridViewコンポーネントを追加しましdgvDeleteた。後者は前者のすぐ右側に配置され、ボタンが表示される場所です。
それdvgDeleteは18ピクセル下dgvMainに配置され、その高さは34ピクセル小さいからです。これにより、と一貫してスクロールすることが保証されdgvMainます。私はそれに垂直スクロールバーを与えましたが、水平ではありませんでした。
dgvMainで、垂直スクロールバーを削除しました。
両方を同じデータソース(私の場合は配列)にバインドしましたが、dgvDelete列を自動的に生成できませんでした:
dgvDelete.AutoGenerateColumns = false;
dgvDeleteボタンを含む列を1つ追加しました。
Fabioと同様に、スクロールを処理するために次のコード(C#)を追加しました。
private void dgvDelete_Scroll(object sender, ScrollEventArgs e)
{
if (e.ScrollOrientation == ScrollOrientation.VerticalScroll)
{
dgvMain.FirstDisplayedScrollingRowIndex = dgvDelete.FirstDisplayedScrollingRowIndex;
}
}
ボタンの列を追加dgvMainして、最初の列をフリーズしました。
dgvMain.Columns[0].Frozen = true;
これで、編集可能なデータの両側にボタンの列が固定されました。
両方のグリッドを同じデータソースにバインドすることの優れた機能は、グリッド内を移動するdgvMainと、の対応する行のボタンdvgDeleteが自動的に強調表示されることです。
ボタンの最初の列のすぐ左に3番目のグリッドを追加することもできdgvMainますが、パフォーマンスへの影響が無視できる場合に限ります。