2012-01-10 2 views
3

Я хотел бы реализовать функцию, позволяющую пользователю изменять размер столбца DataGridView, но не затрагивая соседние столбцы. Во многих программах я заметил, что вы можете изменить размер определенного столбца, а все столбцы слева или справа останутся фиксированными по размеру. Это не поведение по умолчанию в .NET, хотя, поскольку, когда я расширяю столбец, столбцы в правой части будут сжиматься в равных количествах, чтобы учитывать добавленный размер старого столбца.Изменение размеров столбцов DataGridView без влияния на соседние?

Есть ли способ остановить это?

EDIT:

я явно не объяснить, что лучше, так что давайте попробуем это снова:

У меня есть DataTable, который содержит 8 столбцов и кучу строк. Я добавляю DataTable как DataSource для DataGridView. Когда моя форма открывается, 8 столбцов распределяются равномерно по DataTable, который установлен на AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;. Я хочу сохранить AutoSizeColumsMode таким образом. Форма или элемент управления не будут изменены. Только столбцы внутри элемента управления.

Я хочу, чтобы пользователь мог изменять размер отдельного столбца (например, столбец 3), не затрагивая размер всех столбцов справа от него. Поведение по умолчанию заключается в изменении размера всех остальных столбцов для размещения нового изменения. Тем не менее, я хотел бы, чтобы он только изменял размер столбца сразу справа. Таким образом, он не испортит какие-либо пользовательские размеры, которые были установлены в столбце 8.

Я видел приложение сделать это правильно ранее сегодня, хотя я бы хотел, чтобы я мог помнить, что это было, чтобы я мог снять снимок экрана. Все, что я знаю, это то, что когда я изменил размер одного столбца в середине таблицы, он не изменил ширину всех столбцов справа (только тот, который сразу же рядом с ним).

+0

Есть несколько вариантов .. CSS является одним из них .. что у вас есть до сих пор в отношении кода ..? вы пробовали что-нибудь такое, как размер отдельного столбца, а также установка автоматического создания свойства столбца на false. – MethodMan

+1

он говорит о Windows Forms, а не о 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 Nope. Сожалею. (Я не имею в виду, что это невозможно сделать. _I_ не знаю, как это сделать.) – ispiro