2013-07-01 140 views
0

我已实施GRIDCONTROL其中我添加了一个TABLEVIEW其中包含列说NAME, AGE, SALARY。我从数据库中提取数据并相应填写列。现在我想为每一行添加Checkbox,这样如果我可以一次选择两行并获取相应的数据。如何实现复选框?动态添加复选框

我使用的DevExpress控制

<GridControl Name="gridControl1"> 
    <GridControl.View> 
     <TableView x:Name="view" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" /> 
    </GridControl.View> 
    <GridControl.Columns> 
     <GridColumn FieldName="Name" Name="Name" Width="120" Header="Name"/> 
     <GridColumn FieldName="Age" Name="Age" Width="120" Header="Age"/>     
     <GridColumn FieldName="Salary" Name="Salary" Width="120" Header="Salary" />     
    <GridControl.Columns> 
<GridControl> 

现在我想添加复选框行的每个条目,因此,如果选择复选框,我可以获取所有对应于该行的数据。

回答

0

我在类似的应用程序中使用这种方法。单独的列用于选择一个人。该列的标题中还有一个复选框,用于选择/取消选择所有人员。

视图模型

private ObservableCollection<PersonModel> _peopleCollection; 
public ObservableCollection<PersonModel> PeopleCollection 
{ 
     get { return _peopleCollection; } 
     set 
     { 
      _peopleCollection = value; 
      RaisePropertyChanged("PeopleCollection"); 
     } 
    } 

private void initPeople() 
    { 
     foreach (var person in PeopleCollection) 
     {    
      person.PropertyChanged += PersonOnPropertyChanged; 
     } 
    } 

private void PersonOnPropertyChanged(object sender, PropertyChangedEventArgs propertyChangedEventArgs) 
    { 
     if(propertyChangedEventArgs.PropertyName == "IsPersonSelected") 
     { 
    //Handle checked/unchecked person 

     } 
    } 


private bool _allPersonsSelected 
    public bool AllPersonsSelected 
    { 
     get { return _allPersonsSelected; } 
     set 
     { 
      _allPersonsSelected= value; 
      RaisePropertyChanged("AllPersonsSelected"); 

      if (value) 
       SelectRows(); 
      else 
      { 
       DeselectRows(); 
      } 
     } 
    } 

    public void SelectRows() 
    { 
     foreach (var record in PeopleCollection) 
      record.IsPersonSelected = true; 
    } 

    public void DeselectRows() 
    { 
     foreach (var record in PeopleCollection) 
      record.IsPersonSelected = false; 
    } 

} 

这里是从视图中格XAML

<dxg:GridControl ItemsSource="{Binding Path=PeopleCollection}"> 
      <dxg:GridControl.View> 
       <dxg:TableView> 
       </dxg:TableView> 
      </dxg:GridControl.View> 
      <dxg:GridControl.Columns> 
       <dxg:GridColumn FieldName="IsPersonSelected" 
           HorizontalHeaderContentAlignment="Left"> 
        <dxg:GridColumn.Header> 
         <StackPanel Orientation="Horizontal"> 
          <TextBlock>Selected</TextBlock> 
          <dxe:CheckEdit EditValue="{Binding Path=AllPersonsSelected}" 
              Margin="10,0,0,0" /> 
         </StackPanel> 
        </dxg:GridColumn.Header> 
       </dxg:GridColumn> 
       <dxg:GridColumn FieldName="Name" Header="Name"/> 
       <dxg:GridColumn FieldName="Age" Header="Age"/> 
      </dxg:GridControl.Columns> 
     </dxg:GridControl>