ファビオの答えに加えて、私は同じアプローチを実装した私自身の発見を与えたいと思いました。
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
ますが、パフォーマンスへの影響が無視できる場合に限ります。