2012-10-30 2 views
1

SQL 데이터 테이블에서 데이터를 가져 오는 DataGrid가 있습니다. 나는 AutoGenerateColumns를 true로 설정했다.WPF : DataGrid에서 결합 된 모든 열의 너비를 제한하는 방법?

버튼을 클릭하면 DataGrid의 데이터가 pdf 파일로 내보내집니다.

그러나 DataGrid에서 결합 된 모든 열의 너비가 약 800보다 큰 경우 테이블의 크기가 PDF 내부의 페이지보다 큽니다.

DataGrid의 MaxWidth-Property를 800으로 설정했습니다. 열의 크기를 조정할 때 커서를 DataGrid 바깥으로 끌면 가로 스크롤 막대가 나타납니다.

DataGrid보다 큰 열을 만들 수 없도록 모든 열의 최대 크기를 800으로 제한하는 방법이 있습니까?

답변

2

쉬운 해결책은이 같은 columnWidth의 속성을 설정하여 그 열에 대한 starsizing DataGrid에 사용을하는 것입니다 :

<DataGrid Width="800" ColumnWidth="*" /> 

문제 그러나, 이것은 아마 인, 똑같이 넓은 모든 열을 만드는 것입니다 원하는.

그래서 어떻게 할 것인가? 먼저 지금처럼 모든 열을 기본 방법으로 만든 다음 나중에 각 열을 별 모양으로 설정하는 것입니다. 이렇게하면 새 너비에 대한 값을 계산할 수 있으므로 열이 초기 크기를 유지하게됩니다. 내가 무슨 뜻인지 보여주기 위해 코드의 작은 조각을 작성했습니다

..

XAML

<Window x:Class="WpfApplication2.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:local="clr-namespace:WpfApplication2" 
     Title="MainWindow" Height="350" Width="850"> 
    <StackPanel> 
     <DataGrid x:Name="dgTest" Width="800" Loaded="dgTest_Loaded" /> 
    </StackPanel> 
</Window> 

코드 숨김

public partial class MainWindow : Window 
{ 
    public class Test 
    { 
     public string P1 { get; set; } 
     public string P2 { get; set; } 
     public string P3 { get; set; } 
    } 

    public MainWindow() 
    { 
     InitializeComponent(); 

     var t = new List<Test>(new[] { 
      new Test{ P1="på,dsl", P2="234234", P3="asdasdasd"}, 
      new Test{ P1="asasaspå,dsl", P2="23sadasd asf afasdasdasd4234", P3="asdasdasd" }, 
      new Test{ P1="på,ds1231l", P2="234", P3="1ddsdasd" }, 
     }); 

     dgTest.ItemsSource = t; 
    } 

    private void dgTest_Loaded(object sender, RoutedEventArgs e) 
    { 
     //Make the columns use starsizing so their combined width 
     //can't be bigger than the actual datagrid that contains them. 
     foreach (var column in dgTest.Columns) 
     { 
      var starSize = column.ActualWidth/dgTest.ActualWidth; 
      column.Width = new DataGridLength(starSize, DataGridLengthUnitType.Star); 
     } 
    } 
} 
+0

완벽한, 고마워요. – boert03

관련 문제