1. 程式人生 > 實用技巧 >【WinForms】DataGridView自動調整列寬度以及最後一列寬度填充

【WinForms】DataGridView自動調整列寬度以及最後一列寬度填充

直接上程式碼。

using System;
using System.Data;
using System.Linq;
using System.Reflection;
using System.Windows.Forms;

namespace DataGridViewTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object
sender, EventArgs e) { // 資料量很大時,開啟雙緩衝繪製可以明顯提高表格繪製速度,減少拖動滾動條時卡頓 typeof(DataGridView).InvokeMember("DoubleBuffered", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.SetProperty, null, dataGridView1, new object[] { true }); // 禁止新增行 dataGridView1.AllowUserToAddRows = false
; // 禁止刪除行 dataGridView1.AllowUserToDeleteRows = false; // 禁止排序列 dataGridView1.AllowUserToOrderColumns = false; // 禁止調整列寬 dataGridView1.AllowUserToResizeColumns = false; // 禁止調整行高 dataGridView1.AllowUserToResizeRows = false
; // 隱藏行頭 dataGridView1.RowHeadersVisible = false; // 整行選擇 dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; // 禁止編輯 dataGridView1.ReadOnly = true; // 自動調整列寬 dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells; // 當DataSource賦值時自動生成對應的列(此屬性預設為True) dataGridView1.AutoGenerateColumns = true; } private static readonly Random _random = new Random(); private static Record MakeRecord(int index) { return new Record { Id = index, InputVoltage = (float)_random.Next(490, 510) / 100, InputCurrent = (float)_random.Next(990, 1190) / 1000, OutputVoltage = (float)_random.Next(490, 510) / 100, OutputCurrent = (float)_random.Next(990, 1190) / 1000, Efficiency = (float)_random.Next(8000, 9000) / 100, Step = 1, Time = DateTime.Now }; } private void button1_Click(object sender, EventArgs e) { // 生成50000條資料 Record[] data = Enumerable.Range(1, 50000).Select(MakeRecord).ToArray(); // 賦值資料來源,根據設定,自動生成所有對應的列 dataGridView1.DataSource = data; // 設定最後一列寬度填滿控制元件 DataGridViewColumn column = dataGridView1.Columns.GetLastColumn(DataGridViewElementStates.Visible, DataGridViewElementStates.None); if (column != null) { column.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; } } } class Record { public int Id { get; set; } public float InputVoltage { get; set; } public float InputCurrent { get; set; } public float OutputVoltage { get; set; } public float OutputCurrent { get; set; } public float Efficiency { get; set; } public int Step { get; set; } public DateTime Time { get; set; } } }