2015-04-02 3 views
2

Когда я помещаю вид сетки данных в форме, с Dock = DockStyle.Fill, я могу сжать форму до менее чем одной строки, оставшейся до появления каких-либо проблем с сетью данных просмотрите полосу прокрутки. Однако, если я поместил его в панель макета таблицы, которая, в свою очередь, состыковалась с формой, вид сетки данных начинает действовать так, как будто он имеет минимальную высоту, отсекая нижние строки и нижнюю часть полосы прокрутки.DataGridView действует так, как будто он имеет минимальный размер внутри TableLayoutPanel

Form after Resizing

public Form1() 
    { 
     InitializeComponent(); 

     BindingList<Widget> list = new BindingList<Widget>(); 
     dataGridView1.DataSource = list; 
     for (int i = 0; i < 100; i++) 
     { 
      list.Add(new Widget { MyProperty = i }); 
     } 
    } 

    private void InitializeComponent() 
    { 
     this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); 
     this.dataGridView1 = new System.Windows.Forms.DataGridView(); 
     this.tableLayoutPanel1.SuspendLayout(); 
     ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); 
     this.SuspendLayout(); 
     // 
     // tableLayoutPanel1 
     // 
     this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); 
     this.tableLayoutPanel1.Controls.Add(this.dataGridView1, 0, 1); 
     this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; 
     this.tableLayoutPanel1.RowCount = 2; 
     this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F)); 
     this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); 
     // 
     // dataGridView1 
     // 
     this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Fill; 
     // 
     // Form1 
     // 
     this.ClientSize = new System.Drawing.Size(976, 518); 
     this.Controls.Add(this.tableLayoutPanel1); 
     this.tableLayoutPanel1.ResumeLayout(false); 
     ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit(); 
     this.ResumeLayout(false); 
    } 

Я попытался добавить this.tableLayoutPanel1.AutoScroll = true;, который показал, что это сетка данных, которые не изменение размера, бар панель прокрутки был правильно установлен и не отрезать.

Подобные вопросы без ответа, который работал для меня:

+0

Вы можете увидеть скриншот этой ошибки? Я скопировал ваш точный код и, похоже, работает нормально. – OhBeWise

+0

Добавлен снимок экрана. –

+0

Вы должны изменить размер окна, чтобы увидеть проблему. –

ответ

2

Добавить эту строку в InitializeComponent и она должна позволить сетки сокращаться ни к чему, выпускающие на прокручивание показать, как предполагалось.

this.dataGridView1.Size = new System.Drawing.Size(0, 0); 
+1

Это сработало! Я уже пробовал делать то же самое с MinimumSize, чтобы не было никакого эффекта, мне не приходило в голову попробовать Size, так как это должно динамически меняться с Dock. –

+0

Я сделал то же, что и вы. Я не знаю, почему это решение работает или почему размер действует как минимум в этом случае, но я рад, что он решил его для вас. – OhBeWise

+0

К сожалению, это работает для упрощенного случая, но у моего основного приложения все еще есть проблемы. Я должен попытаться выработать новый минимальный повторяемый пример. –

1

Я решил это путем обертывания DataGridView внутри панели перед помещением его в TableLayoutPanel.

Странно, что это не происходит со всеми датами, которые я помещал в таблицы.

+0

Это должно быть комментарий – ketan