2017-02-01 9 views
0

複数の行を含むTableLayoutPanelがあります。その中にはTextBoxのものがあり、その中にはDataGridViewのものがあります。 DataGridViewを含むTableLayoutPanel行のSizeTypeをAutoSizeに設定しました。私は、行が追加/削除されてDataGridViewの行の高さが増減することを期待していました。それは起こっていない。どうやってこれがうまくいくのか誤解していますか?これを私が期待していたように動作させる方法はありますか?TableLayoutPanelの調整DataGridViewから行が追加/削除されたときの行の高さ

+1

コードで「DataGridView.AutoSize = true;」を設定してください(なんらかの理由で、デザイナーには存在しません)。 –

+1

[DataGridViewの自動高さ - DataGridViewの高さを自動化する方法](http://stackoverflow.com/q/38816425/3110834) –

答えて

0

2人のコメント作成者が正しかった:) DataGridView自体に問題があったことが判明しました。私はmethod 1を使って終わった。私は複数のタブを持つテストアプリケーションを構築しました。各タブには、データグリッドビューと行を追加するボタンと行を削除するボタンが含まれていました。最初のタブには3つのコンポーネントが含まれていましたが、実際にはそれが本当に成長できるかどうかを確認したかっただけです。 2番目のタブでは、3つのコンポーネントをAutoscrollのパネル内に配置してtrueに設定しました。それもうまくいきました。それで、DataLabelとButtonをTableLayoutPanelの中​​に入れて(オートスクロールをtrueに設定して)、ユーザコントロール内に配置します。それはすべて正常に動作します。他の人が実験したい場合に備えて、2つのボタンとデータグリッドビューを各タブにドロップし、次のコード(メインフォーム)を使用して(デザイナを使用するのではなく)初期化します。

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 

     Setup(dataGridView1, buttonAddRow1, buttonRemoveRow1); 
     Setup(dataGridView2, buttonAddRow2, buttonRemoveRow2); 
     Setup(dataGridView3, buttonAddRow3, buttonRemoveRow3); 
     Setup(dataGridView4, button1, button2); 
     Setup(userControl11.dataGridView4, userControl11.button1, userControl11.button2); 

     dataGridView3.MaximumSize = new Size(0, 100); 
     dataGridView4.MaximumSize = new Size(0, 100); 
    } 

    #region static helpers 
    private static void Setup(DataGridView grid, Button buttonAdd, Button buttonRemove) 
    { 
     BindingList<RowItem> list = new BindingList<RowItem>(); 
     SetupGrid(grid, list); 
     buttonAdd.Click += (sender, e) => Add(list); 
     buttonRemove.Click += (sender, e) => Remove(list); 
    } 

    private static void Add(BindingList<RowItem> list) 
    { 
     list.Add(new RowItem() { Name = "Row " + list.Count }); 
    } 

    private static void Remove(BindingList<RowItem> list) 
    { 
     if (list.Count > 0) 
      list.RemoveAt(list.Count - 1); 
    } 

    private static void SetupGrid(DataGridView grid, BindingList<RowItem> list) 
    { 
     grid.AutoGenerateColumns = false; 
     grid.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; 
     grid.RowHeadersVisible = false;   
     grid.Columns.Add(CreateTextColumn("Name")); 
     grid.DataSource = list; 
    } 

    /// <summary> 
    /// Sets read-only to true 
    /// </summary> 
    /// <param name="dataPropertyName"></param> 
    /// <param name="format"></param> 
    /// <param name="columnName"></param> 
    /// <returns></returns> 
    static public DataGridViewTextBoxColumn CreateTextColumn(string dataPropertyName, string columnName = null, string format = null, bool readOnly = true, DataGridViewAutoSizeColumnMode autosizeMode = DataGridViewAutoSizeColumnMode.AllCells, int width = 40, DataGridViewColumnSortMode sortMode = DataGridViewColumnSortMode.Automatic) 
    { 
     DataGridViewTextBoxColumn textColumn = new DataGridViewTextBoxColumn(); 
     textColumn.DataPropertyName = dataPropertyName; 
     textColumn.Name = String.IsNullOrEmpty(columnName) ? dataPropertyName : columnName; 
     textColumn.ReadOnly = readOnly; 
     textColumn.AutoSizeMode = autosizeMode; 
     textColumn.Resizable = DataGridViewTriState.True; 
     textColumn.Width = width; 
     if (!String.IsNullOrEmpty(format)) 
      textColumn.DefaultCellStyle.Format = format; 
     textColumn.SortMode = sortMode; 
     return textColumn; 
    } 
    #endregion static helpers 
} 

class RowItem 
{ 
    public string Name { get; set; } 
} 
関連する問題