2

私の問題は、次のようなコードでデータグリッドを入力していることです。

(...)
                while (rdr.Read())
                {
                    dataGrid1.Items.Add(new Produkt { nazwa = rdr.GetString(rdr.GetOrdinal("nazwa")), cena = rdr.GetString(rdr.GetOrdinal("cena")), kod = rdr.GetString(rdr.GetOrdinal("kod")) });

                }
(...)

しかし、データグリッドのすべての列を宣言する前に:

    DataGridTextColumn col1 = new DataGridTextColumn();
    DataGridTextColumn col2 = new DataGridTextColumn();
    DataGridTextColumn col3 = new DataGridTextColumn();
    dataGrid1.Columns.Add(col1);
    dataGrid1.Columns.Add(col2);
    dataGrid1.Columns.Add(col3);
    col1.Binding = new Binding("nazwa");
    col2.Binding = new Binding("cena");
    col3.Binding = new Binding("kod");
    col1.Header = "nazwa";
    col2.Header = "cena";
    col3.Header = "kod";

入力したテキストによるフィルタリングを追加したので、datagrid(各列)の下に3つのtextBoxがありますが、それらの幅はdatagridの列からの幅とは異なります。私はのような何かを試しましたが、それはうまくいきませんtextbox1.width = datagrid.columns[1].width。誰かが私の問題の解決策を知っていますか?

答えてくれてありがとう!

ps。私はそれが幅(fe textbox.width = 200)を宣言するのが好きではありません

4

1 に答える 1

3

そのようなことを試してください:

XAMLファイル:

<Window x:Class="GridAutoWidth.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="30" />
        </Grid.RowDefinitions>
        <DataGrid Name="dgProducts" ItemsSource="{Binding Products}" />

        <Grid Grid.Row="1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="{Binding ElementName=dgProducts, Path=Columns[0].ActualWidth}" />
                <ColumnDefinition Width="{Binding ElementName=dgProducts, Path=Columns[1].ActualWidth}" />
                <ColumnDefinition Width="{Binding ElementName=dgProducts, Path=Columns[2].ActualWidth}" />
            </Grid.ColumnDefinitions>            
            <TextBox Grid.Column="0" />
            <TextBox Grid.Column="1" />
            <TextBox Grid.Column="2" />            
        </Grid>
    </Grid>
</Window>

コードビハインドファイル:

using System.Windows;

namespace GridAutoWidth
{    
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = new MainViewModel();
        }
    }
}

MainViewModel:

using System.Collections.ObjectModel;

namespace GridAutoWidth
{
    class MainViewModel
    {
        public MainViewModel()
        {
            for (int i = 0; i < 10; i++)
            {
                Products.Add(new Product 
                {
                    Name = "Name " + i,
                    Price = (decimal)(18 * (i + 8.4)),
                    Code = "Sample code " + i
                });
            }
        }

        private ObservableCollection<Product> _products = new ObservableCollection<Product>();

        public ObservableCollection<Product> Products
        {
            get { return _products; }
            set { _products = value; }
        }
    }

    public class Product
    {
        public string Name { get; set; }
        public decimal Price { get; set; }
        public string Code { get; set; }
    }
}
于 2012-08-29T21:01:38.273 に答える