2012-01-10 5 views
3

사용자가 DataGridView 열의 크기를 조정할 수 있지만 인접한 열에 영향을주지 않는 기능을 구현하고 싶습니다. 많은 프로그램에서 특정 열의 크기를 조정할 수 있으며 왼쪽 또는 오른쪽의 모든 열은 고정 된 상태로 유지됩니다. 그러나 .NET에서 기본 동작은 아닙니다. 열을 확장하면 오른쪽 열이 이전 열의 추가 된 크기를 고려하여 같은 양으로 압축되기 때문입니다.인접한 것에 영향을주지 않고 DataGridView 열의 크기를 조정 하시겠습니까?

이 문제를 방지하는 방법이 있습니까?

편집 :

내가 여덟 열을 유지하는 DataTable을, 행의 무리가 있습니다

내가 분명히 설명하지 않았다 최선의 것을, 그래서 다시 시도 할 수 있습니다. 해당 DataTable을 DataGridView의 DataSource로 추가합니다. 양식이 열리면 DataTable에 8 개의 열이 균등하게 분산되며 AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;으로 설정됩니다. 이 방법으로 AutoSizeColumsMode를 유지하려고합니다. 양식 또는 컨트롤의 크기가 조정되지 않습니다. 컨트롤 내의 열만.

사용자가 원하는 것은 개별 열 (예 : 열 3)의 크기를 오른쪽의 모든 열의 크기에 영향을주지 않고 크기를 조정할 수 있기를 바랍니다. 기본 동작은 새로운 변경 사항을 수용하기 위해 다른 모든 열의 크기를 조정하는 것입니다. 그러나 오른쪽으로 즉시 열의 크기를 조정하는 것이 좋습니다. 이렇게하면 열 8에 설정된 맞춤 크기가 엉망이되지 않습니다.

오늘 내가 제대로 기억할 수 있었으면 좋겠지 만 응용 프로그램을 제대로 보았습니다. 내가 아는 것 중 하나는 테이블 중간에서 한 열의 크기를 조정할 때 모든 열의 너비를 오른쪽으로 변경하지 않았기 때문입니다 (바로 옆에있는 열만 변경).

+0

몇 가지 옵션이 있습니다. CSS는 그 중 하나입니다. 코드와 관련하여 지금까지 무엇이 있습니까? 별도의 열 자체 크기 조정 및 자동 생성 열 속성을 false로 설정하는 등의 작업을 시도해 보셨습니까? – MethodMan

+1

그는 Asp.NET이 아닌 Windows Forms에 대해 이야기하고 있습니다. – 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