【问题标题】:Bind Datatable to combobox in WPF Grid [duplicate]将数据表绑定到 WPF 网格中的组合框 [重复]
【发布时间】:2013-10-23 06:18:15
【问题描述】:

这是我的 XAML 代码

    <DataGridTemplateColumn.CellEditingTemplate>
       <DataTemplate>
            <ComboBox Height="22" Name="MyCombobox"  
                      ItemsSource="{Binding RelativeSource={RelativeSource AncestorType=Page},Path=Data._cmbxData}" 
                      DisplayMemberPath="Column1" SelectedValuePath="Column2"></ComboBox>
       </DataTemplate>
    </DataGridTemplateColumn.CellEditingTemplate>

这是我的CS代码

        DataTable _cmbxData = new DataTable();
        _cmbxData.Columns.Add("Column1", typeof(int));
        _cmbxData.Columns.Add("Column2", typeof(String));

        _cmbxData.Rows.Add(new object[] { 1,"Value1"});
        _cmbxData.Rows.Add(new object[] { 2, "Value2" });
        _cmbxData.Rows.Add(new object[] { 3, "Value3" });

如何将此数据表绑定到我的 Xaml 中的 Combobox。 ??

谢谢大家

【问题讨论】:

    标签: c# wpf xaml binding


    【解决方案1】:

    这应该可行:

    假设:

    dt - 数据表

    myWindow - XAML 窗口名称

    <Window
    Name="myWindow"
    ...
    

    Col_Name - 所需的列名

    <ComboBox Name="MyComboBox" HorizontalAlignment="Left" Margin="181,55,0,0" Width="120" ItemsSource="{Binding Path=dt, ElementName=myWindow}">
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <Label Content="{Binding Path=Col_Name}"/>
                    </StackPanel>
                </DataTemplate>
            </ComboBox.ItemTemplate>    
        </ComboBox>
    

    或使用RelativeSource

    【讨论】:

      【解决方案2】:

      您的变量 _cmbxData 应声明为您的窗口的属性,如下所示:

      public DataTable CmbxData { get; set; }
      

      那么你的 DataGridTemplateColumn 应该引用这个属性,你可以使用 RelativeSource 或者通过命名你的窗口你可以访问它的属性。

      <Window x:Class="SO1.UI.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"
          x:Name="mainPage">
      <Grid>
          <DataGrid x:Name="dataGridTest">
              <DataGrid.Columns>
                  <DataGridTemplateColumn Header="Test">
                      <DataGridTemplateColumn.CellTemplate>
                          <DataTemplate>
                              <TextBlock Text="Test" />
                          </DataTemplate>
                      </DataGridTemplateColumn.CellTemplate>
                      <DataGridTemplateColumn.CellEditingTemplate>
                          <DataTemplate>
                              <ComboBox Height="22" Name="MyCombobox"  
                                ItemsSource="{Binding ElementName=mainPage , Path=CmbxData}" 
                                DisplayMemberPath="Column1" SelectedValuePath="Column2">            </ComboBox>
                          </DataTemplate>
                      </DataGridTemplateColumn.CellEditingTemplate>
                  </DataGridTemplateColumn>
              </DataGrid.Columns>
          </DataGrid>
      </Grid>
      

      当然,您需要将数据网格与源绑定...例如,这是我要测试的代码隐藏:

         public partial class MainWindow : Window
      {
          public DataTable CmbxData { get; set; }
          public IList<string> Test { get; set; }
          public MainWindow()
          {
              InitializeComponent();
      
              CmbxData = new DataTable();
              CmbxData.Columns.Add("Column1", typeof(int));
              CmbxData.Columns.Add("Column2", typeof(String));
      
              CmbxData.Rows.Add(new object[] { 1, "Value1" });
              CmbxData.Rows.Add(new object[] { 2, "Value2" });
              CmbxData.Rows.Add(new object[] { 3, "Value3" });
      
      
              this.Test = new List<string>();
              this.Test.Add("Test 1");
              this.dataGridTest.ItemsSource = this.Test;
      
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2018-05-21
        • 2012-10-01
        • 2012-06-05
        • 2017-05-17
        • 2013-03-19
        • 1970-01-01
        • 2014-01-08
        • 1970-01-01
        • 2011-01-31
        相关资源
        最近更新 更多