在不影响相邻列的情况下调整DataGridView列的大小
本文关键字:调整 DataGridView 情况下 影响 | 更新日期: 2023-09-27 18:19:51
我想实现一个功能,允许用户调整DataGridView列的大小,但不影响相邻列。我在许多程序中注意到,您可以调整特定列的大小,并且左侧或右侧的所有列的大小都将保持不变。不过,这不是.NET中的默认行为,因为当我展开一列时,右侧的列将以相等的数量压缩,以考虑到旧列的添加大小。
有没有办法阻止这种情况的发生?
编辑:
我显然没有解释最好的,所以让我们再试一次:
我有一个DataTable,它包含8列和一堆行。我添加该DataTable作为DataGridView的DataSource。当我的窗体打开时,这8列均匀地分布在DataTable中,DataTable设置为AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;
。我希望以这种方式保持AutoSizeColumsMode。表单或控件的大小将不会调整。只有控件中的列。
我希望用户能够调整单个列的大小(比如第3列),而不会影响其右侧所有列的大小。默认行为是调整所有其他列的大小以适应新的更改。但是,我希望它只立即向右调整列的大小。这样,它就不会破坏在第8列上设置的任何自定义尺寸。
今天早些时候,我看到一个应用程序做得很好,尽管我希望我能记得是哪个,这样我就可以截图了。我所知道的是,当我调整表中间一列的大小时,并没有改变所有列的宽度(只有紧挨着它的一列)。
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;
}
}