2011-09-14 43 views
9

dataGridViewのサイズを列と行の合計サイズに合わせたいとします。全体の高さについて、私はそのような列の高さにそれを適合させました:dataGridViewのサイズを行と列の合計サイズに合わせる

const int datagridLines = 30; 
s.Height = dataGridView2.Columns[0].HeaderCell.Size.Height; 
for (byte i = 0; i < datagridLines; i++) 
{ 
    dataGridView2.Rows.Add(); 
    s.Height += dataGridView2.Rows[i].Height; 
} 
dataGridView2.ClientSize = s; 

幅はありますが運がないものも試しました。助言がありますか?

ありがとうございました。

答えて

16

これは動作するはずです:

int height = 0; 
foreach (DataGridViewRow row in dataGridView1.Rows) { 
    height += row.Height; 
} 
height += dataGridView1.ColumnHeadersHeight; 

int width = 0; 
foreach (DataGridViewColumn col in dataGridView1.Columns) { 
    width += col.Width; 
} 
width += dataGridView1.RowHeadersWidth; 

dataGridView1.ClientSize = new Size(width + 2, height + 2); 

widthheight値に+ 2は、口座へのファッジ要因でありますDataGridViewの内部要素の幅を指定します。私はあなたがハードコーディングされた数字なしでこの価値を得ることを可能にするコードをどこかで見ていることを思い出していますが、私は今それを見つけることができません。行と列のコレクションの

+0

はい、それでした、ありがとう、ジェイ! – alexxx

+0

Paddingプロパティが+2オフセット値に寄与することはありますか? http://stackoverflow.com/questions/7193268/how-to-decrese-the-size-of-button-to-a-small-size-inside-cell-of-datagrid-view-bu/の受け付けられた回答を参照してください。 7198229#comment-8785853 – TheBlastOne

+0

@ TheBlastOne - Paddingプロパティは、セルの端とそのコンテンツの間のスペースを設定します。私は、DataGridViewColumn.DividerWidthプロパティはそれと何か関係があると信じています。 –

0

これを行うには、DataGridViewRowコレクションとDataGridViewColumnコレクションのプロパティを使用する必要があります。

この中で使用されているものと同様のアプローチを試してみてください。

how to increase rows size in DataGridView

+0

Mamta Dalalもお返事ありがとうございます。 – alexxx

8

GetRowsHeightとGetColumnsWidth方法はあなたが楽な方法で必要なものを与える必要があります。

var totalHeight = dataGridView2.Rows.GetRowsHeight(DataGridViewElementStates.None); 
var totalWidth = dataGridView2.Columns.GetColumnsWidth(DataGridViewElementStates.None); 
+0

ヘッダーの高さ/幅は含まれません。 – AbleArcher

+1

あなたはtotalwidth + = dataGridView1.RowHeadersWidthを行うことができます。 – barlop

7

をもう少し完全版:

dataGridView.Height = dataGridView.Rows.GetRowsHeight(DataGridViewElementStates.None) + dataGridView.ColumnHeadersHeight + 2; 

dataGridView.Width = dataGridView.Columns.GetColumnsWidth(DataGridViewElementStates.None) + dataGridView.RowHeadersWidth + 2; 
+0

まだハードコーディングされています2. – AbleArcher

+1

注目すべき点は、ティッキーとジェイのベストを組み合わせたものですが、 '2'を詳しく説明する必要があります。この場合、 – barlop

+0

は機能しませんが、非効率的な方法があります。http://stackoverflow.com/questions/37635932/calculate-padding-of-datagridview-when-padding-is-greater-than-two – barlop

0

それは後半とで少しです視覚的な基本ですが、これは私のために働いた 他の誰かがこのスレッドを見つける。私はフォームのサイズが変更されると自動的にサイズ変更されるtableLayoutPanelでドッキングされたdatagridviewを使用しています。フォームを縮小しません。私はちょうど小さいフォームを開始します。行は同じテクニックを使用して追加できます。

Private Sub setFormWidth() 
     Dim iTotalWidth As Integer = 0 '884 
     Dim iDisplayedWidth As Integer = 0 
     Dim r As Rectangle 
     For Each c As DataGridViewColumn In dgv_EmpList.Columns 
      If c.Visible Then 
       iTotalWidth += c.Width 
       r = dgv_EmpList.GetColumnDisplayRectangle(c.Index, True) 
       iDisplayedWidth += r.Width 
      End If 
     Next 
     Me.Width += (iTotalWidth - iDisplayedWidth) 
    End Sub 
+0

Aブロック見積もりは、別のソースを引用している場合に使用します。また、フォームがボーダレスでない限り、Me.ClientSizeを使用する必要があります。これは、枠線(異なるWindowバージョンで異なる値を持つ)を除外するためです。 – LarsTech

関連する問題