2013-07-01 5 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

Я использую этот подход для аналогичного приложения. Отдельный столбец используется для выбора человека. В заголовке этого столбца также есть флажок, который будет выбирать/отменять выбор всех людей.

ViewModel

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> 
Смежные вопросы