1

SQLテーブルからデータを取得するDataGridがあります。AutoGenerateColumnsをtrueに設定しました。

ボタンをクリックすると、DataGridのデータがpdfファイルにエクスポートされます。

ただし、DataGridで結合されたすべての列の幅が約800より大きい場合、テーブルはpdf内のページよりも大きくなります。

DataGridのMaxWidth-Propertyを800に設定しました。列のサイズを変更すると、カーソルをDataGridの外側にドラッグでき、水平スクロールバーが表示されます。

結合されたすべての列の最大サイズを800に制限して、列をDataGridより大きくできないようにする方法はありますか?

4

1 に答える 1

2

簡単な解決策は、次のように ColumnWidth プロパティを設定するだけで、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);
        }
    }
}
于 2012-10-30T17:44:27.033 に答える