3

ユーザーが DataGridView 列のサイズを変更できるようにする機能を実装したいと思いますが、隣接する列には影響しません。多くのプログラムで、特定の列のサイズを変更でき、左または右のすべての列のサイズが固定されることに気付きました。ただし、これは .NET の既定の動作ではありません。列を展開すると、古い列の追加サイズを考慮して、右側の列が同じ量だけ圧縮されるためです。

これが起こらないようにする方法はありますか?

編集:

私は明らかにそれを最善の方法で説明していないので、もう一度試してみましょう。

8 つの列と一連の行を保持する DataTable があります。その DataTable を DataGridView の DataSource として追加します。フォームが開くと、8 つの列が DataTable に均等に分散されます。これは に設定されていAutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;ます。このように AutoSizeColumsMode を維持したいと思います。フォームまたはコントロールのサイズは変更されません。コントロール内の列のみ。

私が望むのは、ユーザーが個々の列 (たとえば、列 3 など) のサイズを、その右側にあるすべての列のサイズに影響を与えずに変更できるようにすることです。デフォルトの動作では、他のすべての列のサイズを変更して、新しい変更に対応します。ただし、列のサイズをすぐ右だけに変更したいと思います。このようにして、列 8 に設定されたカスタム サイズが台無しになることはありません。

今日、アプリケーションがこれを適切に実行しているのを見ましたが、スクリーンショットを撮ることができるように、それがどれであったかを思い出せたらいいのにと思います。私が知っているのは、テーブルの中央にある 1 つの列のサイズを変更したときに、右側のすべての列の幅が変更されなかった (そのすぐ隣の列のみ) ということだけです。

4

1 に答える 1

0
public partial class Form1 : Form
{    
    int[] w = new int[100];
    public Form1()
    {
        InitializeComponent();
        dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;    
        Shown += new EventHandler(Form1_Shown);
    }

    void Form1_Shown(object sender, EventArgs e)
    {
        dataGridView1.ColumnWidthChanged += dataGridView1_ColumnWidthChanged;

        //to know what WERE the widths.
        for (int i = 0; i < dataGridView1.Columns.Count; i++) w[i] = dataGridView1.Columns[i].Width;

        //Won't work without this.
        dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None;
    }    

    void dataGridView1_ColumnWidthChanged(object sender, DataGridViewColumnEventArgs e)
    {
        int column = e.Column.Index;

        //unsubscribe so changing will not call itself.
        dataGridView1.ColumnWidthChanged -= dataGridView1_ColumnWidthChanged;

        //updating width.
        dataGridView1.Columns[column + 1].Width = (w[column + 1] + w[column]) - dataGridView1.Columns[column].Width;
        w[column + 1] = dataGridView1.Columns[column + 1].Width;
        w[column] = dataGridView1.Columns[column].Width;

        //re-subscribe
        dataGridView1.ColumnWidthChanged += dataGridView1_ColumnWidthChanged;
    }    
}
于 2012-01-10T18:27:36.173 に答える