2009-03-10 10 views
4

を動作していないようDataGridViewの列の順序は、私がビジネス・オブジェクトのリストにバインドされたDataGridViewのを持っている

 Dim BtnCol As New DataGridViewButtonColumn 
     With BtnCol 
      .Name = "Edit" 
      .Text = "Edit" 
      .HeaderText = String.Empty 
      .ToolTipText = "Edit this Template" 
      .UseColumnTextForButtonValue = True 
     End With 

     .Columns.Add(BtnCol) 
     BtnCol = Nothing 

     For Each col As DataGridViewColumn In Me.dgvTemplates.Columns 

       Select Case col.Name 

       Case "Name" 
        col.DisplayIndex = 0 
        col.FillWeight = 100 
        col.Visible = True 

       Case "Description" 
        col.DisplayIndex = 1 
        col.FillWeight = 100 
        col.Visible = True 

       Case "Created" 
        col.DisplayIndex = 3 
        col.HeaderText = "Created On" 
        col.DefaultCellStyle.Format = "d" 
        col.FillWeight = 75 
        col.Visible = True 

       Case "CreatedBy" 
        col.DisplayIndex = 2 
        col.HeaderText = "Created By" 
        col.FillWeight = 75 
        col.Visible = True 

       Case "Edit" 
        col.DisplayIndex = 4 
        col.HeaderText = "" 
        col.FillWeight = 30 
        col.Visible = True 

       Case Else 
        col.Visible = False 

      End Select 

     Next 

ボタンの列(編集)が何をしても、最後ではなく他の列の中央に常に表示されることを除いて、これは合理的にうまくいくようです。 DGV.Columns.AddとDGV.Columns.Insertの両方を試しただけでなく、列のDisplayIndexを設定しましたが(これは他のすべての列で機能します)、正しい位置にボタン列を表示することができません。私はまた、列の残りの部分を設定する前後にボタンの列を追加しようとしましたが、これは何の違いもないようです誰も私が間違っていることを示唆することができますか?それは私を狂って運転している....

答えて

16

同様の問題を解決するために探している間私はあなたのポストにつまずいた。私は最終的にあなたが(DisplayIndexプロパティを使用して)言及し、DataGridViewAutoGenerateColumnsプロパティをfalseに設定することによってそれを追跡しました。このプロパティはデザイナでは表示されないので、フォームのコンストラクタに追加しました。グリッドのデータソースを設定する前に、これを必ず実行してください。このことができます

希望...

+1

は、私が列を追加するデザイナーを使用していた(一部はマッピングされたが、他の人ではない)と、まだ私は外に列を得ていました注文。バインディングがトリックを行う前に、 'AutoGenerateColumns = false; 'を設定してください。ありがとう。 –

4

AutoCreateColumnが問題です。次の記事では、それを修正する方法の例を示します。 DataDridView DisplayOrder Not Working

から

データグリッドビューで列のDisplayIndexを設定し、一部の列は順不同でいました。この問題を解決するには、データソースを設定する前にAutoGenerateColumnsをtrueに設定し、その後にFALSEに設定する必要がありました。例については

dgvReservedStalls.AutoGenerateColumns = True 
dgvReservedStalls.DataSource = clsReservedStalls.LoadDataTable() 
dgvReservedStalls.AutoGenerateColumns = False 
+0

これは私のために働いた+あなたは列をautogenすることができますし、それらを並べ替えることができます。 – stigzler

2

同じ問題、そしてしばらく検索した後、私は昇順でDisplayIndexesを設定することによって、私のためにそれを作ったことが分かりました。

これは数値なので対話的ですが、それでも順番に設定する必要があります。

With customersDataGridView 
    .Columns("ContactName").DisplayIndex = 0 
    .Columns("ContactTitle").DisplayIndex = 1 
    .Columns("City").DisplayIndex = 2 
    .Columns("Country").DisplayIndex = 3 
    .Columns("CompanyName").DisplayIndex = 4 
End With 

これはしなかったものの:

これは動作します私にとっては

With customersDataGridView 
    .Columns("ContactName").DisplayIndex = 0 
    .Columns("CompanyName").DisplayIndex = 4 
    .Columns("Country").DisplayIndex = 3 
    .Columns("ContactTitle").DisplayIndex = 1 
    .Columns("City").DisplayIndex = 2 
End With