2012-08-29 39 views
2

我的問題是,我的DataGrid填寫的代碼,如:獲取DataGrid的寬度

(...) 
       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個文本框,但他們的寬度不是像datagrid中的列的寬度。我嘗試了一些像textbox1.width = datagrid.columns[1].width這樣的想法,但那不起作用。 任何人都知道我的問題的解決方案?

感謝您的任何答案!

ps。我不能就這樣宣告寬度(FE textbox.width = 200

回答

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

那完美的作品!非常感謝! – user1617141

+0

不客氣。 – kmatyaszek