调整DataGridView列宽度,而不影响相邻的列?

3
我想实现一项功能,即允许用户调整DataGridView的列大小,但不影响相邻的列。我注意到在许多程序中,您可以调整特定的列,左侧或右侧的所有列都将保持固定大小。但是,在.NET中,这不是默认行为,因为当我扩展列时,右侧的列将以相等的量压缩以适应旧列的增加尺寸。有没有办法阻止这种情况发生?
编辑:
我显然没有最好地解释,所以让我们再试一次:
我有一个包含8列和一堆行的DataTable。我将该DataTable添加为DataGridView的DataSource。当我的窗体打开时,8个列均匀分布在DataTable上,该DataTable设置为AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill。我想保持AutoSizeColumsMode这种方式。窗体或控件将不会被调整大小。仅控制内的列。
我想要的是,用户能够调整单个列的大小(比如说第3列),而不影响其右侧所有列的大小。默认行为是调整所有其他列以适应新更改。但是,我希望它只调整右侧紧邻的列的大小。这样,它就不会破坏在第8列上设置的任何自定义大小。
今天早些时候,我看到一个应用程序正确地执行此操作,但我希望我能记住它是哪个应用程序,这样我就可以拍张截图。我所知道的是,当我调整表中间的一列时,它不会更改右侧所有列的宽度(仅更改紧邻其旁边的列)。

有几个选项可供选择... CSS 是其中之一... 你在代码方面有什么进展?你尝试过调整单独列的大小以及将自动生成列属性设置为 false 吗? - MethodMan
1
他在谈论 Windows Forms,而不是 Asp.NET。 - dknaack
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;
    }    
}

哇,这基本上就是我想要的。唯一的差异(主要是我挑剔)是列没有实时调整大小。我必须释放鼠标才能实际更新。你知道有什么方法可以改变这个,让列在我拖动它时调整大小吗? - Mirrana
@agent154 不好意思,我不知道怎么做。 - ispiro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接