2012-01-10 9 views
3

ユーザーがDataGridView列のサイズを変更できるようにする機能を実装したいと思いますが、隣接する列には影響しません。私は多くのプログラムで、特定の列のサイズを変更できることに気付きました。左または右の列はすべて固定サイズのままです。しかし、これは.NETのデフォルト動作ではありません。なぜなら、列を展開すると、右側の列は、古い列の追加されたサイズを考慮して等量に圧縮されるからです。隣接するものに影響を与えずにDataGridView列のサイズを変更しますか?

これをやめる方法はありますか?

EDIT:

私は8列を保持したDataTable、および行の束を持っている:

私は明らかに説明しなかったが最高のことなので、もう一度これを試すことができます。そのDataTableをDataGridViewのDataSourceとして追加します。私のフォームが開くと、8列はDataTableに均等に広がり、AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;に設定されます。私はこの方法でAutoSizeColumsModeを保持したいと思います。フォームまたはコントロールのサイズが変更されません。コントロール内の列のみ。私が欲しいもの

は、それはそれの右側にあるすべての列の大きさに影響を与えることなく、個々の列(のような、言って、列3)サイズを変更することができるようにするユーザーのためです。デフォルトの動作は、新しい変更のために他のすべての列のサイズを変更することです。しかし、私は右の列をすぐにサイズを変更するだけです。このように、それは私が、私はそれが私はスクリーンショットを取ることができるだった覚えている可能性がしたいけれども、私は、今日のアプリケーションは以前これを適切に行う見たコラム8.

に設定された任意のカスタムサイズを台無しにしません。私が知っているのは、テーブルの中央で1列のサイズを変更したときに、すべての列の幅が右側(そのすぐ隣の列のみ)の幅に変更されていないことです。

+0

いくつかのオプションがあります。CSSは、それらのうちの1つです。これまでのところ、コードに関しては何がありますか?あなたは、このような独立したコラム自体サイジングだけでなく、自動で列にプロパティをfalseに生成する設定として何を試してみました... – MethodMan

+1

彼は私がそれを望んでいた正確にどのようにほとんどの作品Windowsフォームではなく、Asp.NET – dknaack

答えて

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; 
    }  
} 
+0

うわー、について話しています。唯一の矛盾(ほとんど私がニックピッキングしている)は、列がリアルタイムでサイズ変更されないということです。私はそれを実際に更新するためにマウスをリリースする必要があります。これを変更してドラッグすると列のサイズが変更されるようにする方法を知っていますか? – agent154

+0

@ agent154いいえ。ごめんなさい。 (私はそれができないことを意味しません。_私は方法がわかりません。) – ispiro

関連する問題