在数据网格中填充组合框

时间:2013-01-21 13:27:02

标签: c# wpf datagrid combobox

我有一个DataGrid来将数据插入到Sql Server表中。在DataGrid内部,我ComboBox从代码簿中挑选数据(这是同一数据库中的表),并将此数据插入到绑定到DataGrid的表中。这是XAML:

<DataGrid Name="dgrStavke" AutoGenerateColumns="False" Height="160" Width="600" HorizontalAlignment="Left" Margin="5" Grid.Row="7" Grid.ColumnSpan="4">
        <DataGrid.Columns>
            <DataGridTemplateColumn Header="Artikl ID">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <ComboBox Name="cmbArticle" Width="120" ></ComboBox>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>                    
            </DataGridTemplateColumn>
            <DataGridTextColumn Header="Article Name" Width="150"></DataGridTextColumn>
            <DataGridTemplateColumn Header="Usluga ID">
                <DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                        <ComboBox Name="cmbService" Width="120"></ComboBox>
                    </DataTemplate>
                </DataGridTemplateColumn.CellEditingTemplate>
            </DataGridTemplateColumn>
            <DataGridTextColumn Header="Service Name" Width="150"></DataGridTextColumn>
        </DataGrid.Columns>
    </DataGrid>

当我在组合框文章中选择文章ID时,下一个DataGridTextColumn应显示本文的名称。服务也一样。可以插入一些文章和服务,这就是我使用Datagrid的原因。

我该怎么做?

感谢。

2 个答案:

答案 0 :(得分:0)

((ComboBox)GRID.Columns[N].FindControl("cmbArticle")).COMBO-BOX-PROPERTY

这是正确的语法吗?我不知道,我认为你正在寻找类似的东西。

答案 1 :(得分:0)

我想以下示例可以帮助您实现目标

在下面使用的XAML代码中,

<Window.Resources>
        <ObjectDataProvider x:Key="RecordValues" ObjectType="{x:Type local:RecordTemp}" MethodName="GetPersonList" >            
        </ObjectDataProvider>
    </Window.Resources>
    <Grid>
        <Grid>
            <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding}"
                  Margin="10,10,73,155" Name="dataGrid1">
                <DataGrid.Columns>
                    <DataGridComboBoxColumn Header="Artikl ID" Width="300" 
                                            SelectedValueBinding="{Binding SelectedPart, UpdateSourceTrigger=PropertyChanged}"                                            
                                            DisplayMemberPath="ArticleID"
                     ItemsSource="{Binding Source={StaticResource RecordValues}}" />

                    <DataGridTextColumn Header="Order Name" Binding="{Binding SelectedPart.ArticleName}" />
                </DataGrid.Columns>
            </DataGrid>            
        </Grid>
    </Grid>

在C#下面使用的代码中,

public class RecordTemp : INotifyPropertyChanged
{
    List<PartsList> _value = new List<PartsList>();

   public RecordTemp()
    {
        _value.Add(new PartsList() { ArticleID = "1", ArticleName = "one - 1", ArticleQuantity = 20 });
        _value.Add(new PartsList() { ArticleID = "2", ArticleName = "Two - 2", ArticleQuantity = 10 });
    }

    public List<PartsList> GetPersonList()
    {
        return _value;
    }

    private PartsList _SelectedPart;

    public PartsList SelectedPart
    {
        get { return _SelectedPart; }
        set
        {
            _SelectedPart = value;
             OnPropertyChanged("SelectedPart");
        }
    }

    public void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null  )
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }     


    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged;



    #endregion
}

 public class PartsList
{
    public string ArticleID { get; set; }
    public double ArticleQuantity { get; set; }
    public string ArticleName { get; set; }
    }

在MainWindow中,下面的代码可以帮助绑定网格。

ObservableCollection<RecordTemp> RecordsTemp = new ObservableCollection<RecordTemp>();
RecordsTemp.Add(new RecordTemp());
RecordsTemp.Add(new RecordTemp());
dataGrid1.DataContext = RecordsTemp;   

请评论如果您需要任何澄清。我会帮你的