2011-09-01 40 views
0

我有一個DataGrid,我綁定到由SQL查詢填充的DataTable。我希望這個網格的列可以自動生成,其寬度可以達到一定數量的像素,但如果用戶希望它更寬,仍然可以擴展。目前DataGrid上的ColumnWidth屬性被設置爲SizeToHeader(它看起來並不像描述的那樣工作,因爲它仍然按照單元格內容進行調整)。在數據網格中自動生成的列設置最大自動生成寬度

有什麼辦法可以設置最大代寬度?

設置MaxColumnWidth可防止用戶調整大於該寬度的列的大小。

我也嘗試過鉤入AutoGeneratedColumns,但由於行尚未加載,ActualWidth屬性僅代表我設置的MinWidth。 DataGrid完成加載其初始行集後會觸發事件嗎?

回答

0

遍歷列集合並獲取每列的寬度。如果寬度大於閾值,則將其設置爲最大寬度。控件初始化後,您會想要這樣做。

這篇文章可能會有所幫助:http://support.microsoft.com/kb/812422

像這樣的東西可能工作:

foreach(var c in grid.Columns) 
{ 
    var width = c.Width; 
    if(width > threshold) 
    { 
     c.Width = threshold; 
    } 
} 
+0

我要在這裏做一個諷刺性的評論,但後來我意識到,相反的是我原以爲,DataGrid的加載事件觸發在最初的行被全部加載之後。因此,這將完美地工作,我只是接錯了事件。 – JHunz

+0

@Jhunz很高興聽到這對你有用。無論如何,請隨時發表諷刺意見。 :d – rtalbot

0

從文檔中單個DataGridColumn上設置的Width屬性優先於ColumnWidth屬性。您可能可以遍歷AutoGeneratedColumns事件中的DataGridColumns,並設置各個寬度並讓它們保持不變。

0

我需要稍微修改rtalbot的代碼得到這個對我的WPF/.NET 4.5項目工作.. 。ActualWidth的和datagridlength:

 // fix extra wide columns 
     foreach (var c in dgMain.Columns) 
     { 
      var width = c.ActualWidth; 
      if (width > 200) 
      { 
       c.Width = new DataGridLength(200); 
      } 
     }