2014-12-30 61 views
0

在wpf应用程序中,我有选项卡,其中有下拉菜单。下拉列表中有不同的表格。所有表格都有不同的列。我想要实现以下功能,如何根据下拉值选择创建动态网格

1)基于下拉选择显示一个网格,包含选定表格的所有列。 2)添加一个新行到该表 3)编辑所选表

我新的WPF,这将是真正伟大的,如果有人能建议我应该是什么好办法一列?

回答

1

假设使用的是MVVM: 1.绑定组合框selectedItem设置一个属性如下:

public int SelectedItem 
{ 
    get 
    { 
     return _selecteditem; 
    } 
    set 
    { 
     if (_selectedItem != value) 
     { 
      _selectedItem = value; 
      RaisePropertyChanged("SelectedItem"); 
      UpdateGridData(); 
     } 
    } 
} 

当选择改变UpdateGridData方法被调用。更新绑定到UpdateGridData方法中的数据网格ItemsSource的集合。

例如:让你的DataGrid被绑定到的声明如下的集合称为MyCustomCollection:

public ICollectionView MyCustomCollection 
     { 
      get; 
      set; 
     } 

您的XAML看起来如下:

<DataGrid ItemsSource="{Binding MyCustomCollection}" .../> 

在您的视图模型实现UpdateGridData ()如下:

void UpdateGridData() 
{ 
//resultfromDatabase is the collection from which the data based on the selected item is added to 
    var resultDataFromDatabase = GetDataFromDatabase(this.SelectedItem); 
    MyCustomCollection = CollectionViewSource.GetDefaultView(resultDataFromDatabase); 
} 
  1. 要添加新行,只需调用DataGrid ItemsSource绑定到的集合的源的Add()方法即可。您还应该查看数据网格的CanUserAddRows属性。

  2. 编辑datagrid使焦点更改时简单的网格可编辑和保存数据。或者,您可以在DataGrid中创建一个DataGridTemplateColumn并在其中添加一个自定义编辑按钮,该按钮可以启用对该行的编辑或打开一个新的模式窗口,您可以在其中编辑字段并将其保存。

希望这会有所帮助。


请不要忘记投票,如果答案已经帮助和标记为答案,如果这回答了你的问题。

+0

非常感谢您的回复。是的,我正在使用MVVM。用这种方法应该怎么看?我应该使用AutoGenerateColumns =“True”创建DataGrid吗? – S52

+0

不需要。除非要向集合中添加新列,否则不必拥有AutoGenerateColumns。我假设你需要添加行而不是列。另外,当你创建DataGridTemplateColumn来通过模态窗口进行编辑时,你必须通过XAML来完成。 * <按钮内容= “编辑”/> * – RamyaN

+0

是的,我想要在显示选定的表格后将行添加到网格中。可能我忘记提及,下拉列表中的所有表格在数据库中都有大约100行(最大)。所以一旦我从下拉列表中选择anytable,它应该显示来自数据库的所有值,然后我应该可以编辑并向其添加新行。所以你说的很清楚,但我对这个观点该如何应该感到困惑?由于每个表都有不同的列 – S52

相关问题