我正在编写一种方法,该方法将调整datagridview中各列的大小,以便所有数据都可见,并且这些列完全填满了datagridview。我正在做的是:

1)将DataGridViewAutoSizeColumnsMode设置为AllCells。这将显示单元中的所有数据。

2)计算最后一列的右边缘与数据网格视图的右边缘之间的像素距离。

3)用该距离除以列数。这给了我应该添加到每一列的宽度,以完全填充datagridview的宽度。

4)将(3)的宽度添加到每一列。

从理论上讲,这将在列中显示所有数据,并完全填充datagridview。

DataGridViewAutoSizeColumnsMode设置为fill时,列宽均相等。但是,并非我所有的数据都具有相等的宽度。因此,在将ColumnsMode设置为fill的情况下,某些单元格中的数据流失了边缘,而其他单元格中出现了一堆空白。但是设置为AllCells,我在最右边的列和datagridview的右边缘之间留有很大的空隙。

问题所在:我似乎无法设置列宽属性。我确实意识到,我没有考虑过总列宽大于datagridviewwidth的情况。

private void autoSizeDGV(DataGridView dgv)
    {
        try
        {
            //Step 1
            dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
            //Step 2
            int totalcellwidth = 0;
            for (int i = 0; i < dgv.ColumnCount; i++)
            {
                totalcellwidth += dgv.Columns[i].Width;
            }
            //Step 3
            int widthtoadd = (dgv.Width - totalcellwidth)/dgv.ColumnCount;
            //Step 4
            for (int i = 0; i < dgv.ColumnCount; i++)
            {
                Debug.WriteLine("previous dgv.Columns[" +i+ "]: " + dgv.Columns[i].Width);
                dgv.Columns[i].Width += widthtoadd;
                Debug.WriteLine("after dgv.Columns[" + i + "]: " + dgv.Columns[i].Width);
            }
        }

最佳答案

好吧,我回答了我自己的问题。 dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;语句将覆盖任何非用户对列宽的更改。因此,尝试以编程方式更改宽度是不可行的。但是通过在其位置使用dgv.AutoResizeColumns();,一切正常。

因此,正确的方法是:

private void autoSizeDGV(DataGridView dgv)
    {
        try
        {
            //Step 1
            dgv.AutoResizeColumns();

            //Step 2
            int totalcellwidth = 0;
            for (int i = 0; i < dgv.ColumnCount; i++)
            {
                totalcellwidth += dgv.Columns[i].Width;
            }
            //Step 3
            int widthtoadd = (dgv.Width - totalcellwidth) / dgv.ColumnCount;
            //Step 4
            for (int i = 0; i < dgv.ColumnCount; i++)
            {
                Debug.WriteLine("previous dgv.Columns[" + i + "]: " + dgv.Columns[i].Width);
                dgv.Columns[i].Width += widthtoadd;
                Debug.WriteLine("after dgv.Columns[" + i + "]: " + dgv.Columns[i].Width);
            }
        }

关于c# - 无法分配datagridview.columns [i] .Width属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9926309/

10-09 22:45