DataGridView列宽度百分比

本文关键字:百分比 DataGridView | 更新日期: 2023-09-27 18:05:27

是否有办法给每个列在一个DataGridView的总网格的百分比宽度?我目前使用固定宽度,但想给一个列一个15%的宽度,另一个25%的宽度,等等,以便100%的表被填充和调整大小与网格。

DataGridView列宽度百分比

尝试使用DataGridViewColumn。FillWeight财产。基本上,你给每个列分配一个权重,列根据这些权重重新调整大小。MSDN的文章并没有那么好。请参阅下面的文章以获得更好的解释-

在。net 2.0中使用DataGridView控件显示数据-自动列大小

试试这个

    private void DgvGrd_SizeChanged(object sender, EventArgs e)
    {
        dgvGrd.Columns[0].Width = (int)(dgvGrd.Width * 0.2);
        dgvGrd.Columns[1].Width = (int)(dgvGrd.Width * 0.2);
        dgvGrd.Columns[2].Width = (int)(dgvGrd.Width * 0.4);
        dgvGrd.Columns[3].Width = (int)(dgvGrd.Width * 0.2);
        // also may be a good idea to set FILL for the last column
        // to accomodate the round up in conversions
        dgvGrd.Columns[3].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; 
    }

可以使用值转换器
这是减去一个参数,但你可以用它除以一个参数。

<local:WidthConverter x:Key="widthConverter"/>
<GridViewColumn Width="{Binding ElementName=lvCurDocFields, Path=ActualWidth, Converter={StaticResource widthConverter}, ConverterParameter=100}">

 [ValueConversion(typeof(double), typeof(double))]
    public class WidthConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            // value is the total width available
            double otherWidth;
            try
            {
                otherWidth = System.Convert.ToDouble(parameter);
            }
            catch
            {
                otherWidth = 100;
            }
            if (otherWidth < 0) otherWidth = 0;
            double width = (double)value - otherWidth;
            if (width < 0) width = 0;
            return width; // columnsCount;
        }
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }