2013-07-18 67 views
7

Tôi tự hỏi nếu có thể có một cột datgridview để điều chỉnh tự động chiều rộng của nó để nội dung của nó và đồng thời được resizable bởi người dùng?DataGridView cột tự động điều chỉnh chiều rộng và thay đổi kích thước

đây những gì tôi đã cố gắng cho đến nay:

dataGridView.AllowUserToResizeColumns = true; 
dataGridView.Columns[0].AutoSizeMode=DataGridViewAutoSizeColumnMode.DisplayedCells; 
dataGridView.Columns[0].Resizable = DataGridViewTriState.True; 

Nhưng tôi vẫn không thể thay đổi kích thước kích thước cột bằng tay.

Nếu có ai đó đã gặp sự cố này hoặc có bất kỳ ý tưởng nào cho tôi biết.

Cảm ơn.

+0

không phải là cột 'DataGridView' có thể định lại kích thước theo mặc định? Điều gì xảy ra khi bạn xóa tất cả mã này? Bạn có thể thay đổi kích thước chúng không? – Axarydax

+0

Có các cột có thể thay đổi kích thước. Tôi có các cột khác trong datagrid của tôi có thể thay đổi kích thước. Nhưng ngay sau khi tôi đặt AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells thành một cột, cột cụ thể này không thể thay đổi kích cỡ được nữa trong khi những cột khác lại có. – wallou

Trả lời

16

Cuối cùng tôi đã tìm được cách để làm những gì tôi muốn.

Ý tưởng là để

  • để cho dataGridView thay đổi kích thước các cột riêng của mình để phù hợp với nội dung, và sau đó
  • thay đổi các AutoSizeColumnMode và thiết lập độ rộng với giá trị mà bạn chỉ được lưu trữ.

Đây là mã:

dataGridView.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells; 
int widthCol = dataGridView.Columns[i].Width; 
dataGridView.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.None; 
dataGridView.Columns[i].Width = widthCol; 

Hy vọng điều này sẽ giúp.

2

Xây dựng trên mã ở trên để lặp nó cho tất cả các cột và cũng tự động điều chỉnh độ rộng của DataGridView

//initiate a counter 
int totalWidth = 0; 

//Auto Resize the columns to fit the data 
foreach (DataGridViewColumn column in mydataGridView.Columns) 
{ 
    mydataGridView.Columns[column.Index].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells; 
    int widthCol = mydataGridView.Columns[column.Index].Width; 
    mydataGridView.Columns[column.Index].AutoSizeMode = DataGridViewAutoSizeColumnMode.None; 
    mydataGridView.Columns[column.Index].Width = widthCol; 
    totalWidth = totalWidth + widthCol; 
} 
//the selector on the left of the DataGridView is about 45 in width 
mydataGridView.Width = totalWidth + 45; 
0

Điều đó không phải là rõ ràng (nó không phải là với tôi) là sử dụng AutoSizeMode có nghĩa là chúng ta muốn kích thước được quản lý, do đó ngụ ý rằng người dùng sẽ không (không thể) thay đổi kích cỡ. Vì vậy, những gì tôi đã cố gắng và nó có vẻ làm việc là sử dụng DataGridView.AutoResizeColumn (lưu ý rằng nó không thay đổi kích thước một lần) cho mỗi cột hoặc hầu hết các cột sau đó đặt DataGridView.AllowUserToResizeColumns thành true. Có thể có các biến thể khác nhưng điều quan trọng là việc sử dụng AutoSizeMode là loại trừ lẫn nhau với việc cho phép người dùng thực hiện thay đổi kích thước.

0
  • Cảm ơn các giải pháp trên (Để lặp qua DataGridView.Columns, thay đổi AutoSizeMode sang một giá trị, thu thập giá trị chiều rộng và đặt nó trở lại sau khi thay đổi AutoSizeMode-DataGridViewAutoSizeColumnMode.None).
  • Tôi đấu tranh với nó, và nhận thấy nó sẽ không hoạt động bất cứ khi nào nó được gọi là từ các nhà xây dựng lớp hoặc bất kỳ dòng trước Form.Show() hoặc Form.ShowDialog(). Vì vậy, tôi đặt đoạn mã này vào sự kiện Form.Shown và điều này phù hợp với tôi.
  • đang chuyển đổi của tôi, reguardless của bất cứ DataGridView.AutoSizeColumnsMode đặt trước, tôi sử dụng DataGridViewColumn.GetPreferredWidth() thay vì thay đổi DataGridViewColumn.AutoSizeMode và thiết lập giá trị chiều rộng ngay lập tức, sau đó thay đổi DataGridView.AutoSizeColumnsMode một lần:

    private void form_Shown(object sender, EventArgs e) 
    { 
         foreach (DataGridViewColumn c in dataGridView.Columns) 
          c.Width = c.GetPreferredWidth(DataGridViewAutoSizeColumnMode.DisplayedCells, true); 
         dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None; 
    } 
    
  • Hãy chắc chắn để thiết lập

     dataGridView.AllowUserToResizeColumns = true; 
    
  • Tôi không biết cách tính năng này chỉ hoạt động sau khi biểu mẫu được hiển thị.

0

Bạn chỉ có thể sử dụng mã đơn giản này:

dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.DisplayedCells); 

Sau khi thiết lập nguồn dữ liệu. Nó sẽ thiết lập chiều rộng và cho phép thay đổi kích thước.

Các vấn đề liên quan