【问题标题】:Resizing DataGridView columns without affecting adjacent ones?在不影响相邻列的情况下调整 DataGridView 列的大小?
【发布时间】:2012-02-07 00:31:52
【问题描述】:

我想实现一项功能,允许用户调整 DataGridView 列的大小,但不影响相邻列。我注意到在许多程序中,您可以调整特定列的大小,并且左侧或右侧的所有列都将保持固定大小。不过,这不是 .NET 中的默认行为,因为当我展开一列时,右侧的列将等量压缩以解决旧列增加的大小。

有没有办法阻止这种情况发生?

编辑:

我显然没有解释最好,所以让我们再试一次:

我有一个包含 8 列和一堆行的 DataTable。我将该 DataTable 添加为 DataGridView 的 DataSource。当我的表单打开时,8 列均匀分布在设置为AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; 的 DataTable 中。我想以这种方式保持 AutoSizeColumsMode 。不会调整窗体或控件的大小。只有控件内的列。

我想要的是让用户能够调整单个列(例如第 3 列)的大小,而不会影响其右侧所有列的大小。默认行为是调整所有其他列的大小以适应新更改。但是,我希望它只将列的大小立即调整到右侧。这样,它就不会搞砸在第 8 列中设置的任何自定义尺寸。

我今天早些时候看到一个应用程序正确执行此操作,但我希望我能记住它是哪个,以便我可以截屏。我所知道的是,当我调整表格中间一列的大小时,它并没有改变右侧所有列的宽度(只有紧挨着它的那一列)。

【问题讨论】:

  • 有几个选项.. CSS 就是其中之一.. 到目前为止,您在代码方面有什么..?您是否尝试过任何方法,例如调整单独列本身的大小以及将自动生成列属性设置为 false..
  • 他说的是 Windows 窗体,而不是 Asp.NET

标签: c# winforms datagridview datagridviewcolumn


【解决方案1】:
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;
    }    
}

【讨论】:

  • 哇,这完全符合我的要求。唯一的差异(主要是我吹毛求疵)是该列不会实时调整大小。我必须释放鼠标才能真正更新。你知道有一种方法可以改变它,以便在我拖动它时调整列的大小?
  • @agent154 不。对不起。 (我不是说不能做。不知道怎么做。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-17
  • 2014-03-13
  • 1970-01-01
  • 2015-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多