【问题标题】:Get DataGrid width获取 DataGrid 宽度
【发布时间】:2012-08-24 13:07:15
【问题描述】:

我的问题是我的数据网格填充了如下代码:

(...)
                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";

现在我已经通过输入的文本添加了过滤,所以我在数据网格(每列)下有 3 个文本框,但它们的宽度不像数据网格中列的宽度。我试过像textbox1.width = datagrid.columns[1].width 这样的想法,但这不起作用。 有人知道我的问题的解决方案吗?

感谢您的任何回答!

ps。我不能像这样声明宽度(例如textbox.width = 200

【问题讨论】:

    标签: c# wpf binding datagrid


    【解决方案1】:

    试试这样的:

    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();
            }
        }
    }
    

    主视图模型:

    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; }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-11
      • 2015-03-20
      • 1970-01-01
      • 1970-01-01
      • 2012-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多