none
CheckBox em Datagrid no WPF RRS feed

  • Pergunta

  • Pessoal preciso obetr o valor de um checkbox que não esta no objeto, apenas no Datagrid, ai preciso que salve apenas os valor das linhas onde o checkbox está checado.

    Porém para rsolver isso cheguei a 2 soluções porém cada uma esta com problemas.

    1º - Obter o número da linha do datagrid dentro do foreach.

    ou

    2º - Obter o valor do elemento checkbox da linha.

    estou usando a seguinte solução.

     

      private void btnSave_Click(object sender, RoutedEventArgs e)
        {
          
           foreach (Colporteur item in (List<Colporteur>)colporteurDataGrid.ItemsSource)
          {
        colporteurDataGrid.ItemContainerGenerator.ContainerFromItem(o);
            
    
    
             
    
            int tl = colporteurDataGrid.Items.Count;
    
            int pos = colporteurDataGrid.Items.CurrentPosition;
    
            
            var tt =  colporteurDataGrid.CurrentCell.Item.ToString();         
    
              CurrentAccount objC = new CurrentAccount();
              gridDebit.DataContext = new CurrentAccount() { CampaignID = Login.SelectedCampaign.CampaignID, PeriodID = Login.OpenPeriod.PeriodID, ColporteurID = item.ColporteurID, Debit = decimal.Parse(debitTextBox.Text), Description = descriptionTextBox.Text };
              
    
              var l = pos;
              
              var vl = colporteurDataGrid.ItemContainerGenerator.ContainerFromIndex(l);
    
              DataGridRow ObjRow = (DataGridRow)vl;
    
              FrameworkElement objElement = colporteurDataGrid.Columns[0].GetCellContent(ObjRow);
    
              objElement.GetType().ToString().EndsWith("CheckBox");
    
              CheckBox objChk = (CheckBox)objElement;
             
            
    
              if (objChk.IsChecked == true)
              {
    
                item.ColporteurID = ((CurrentAccount)gridDebit.DataContext).ColporteurID;
                objC.ColporteurID = ((CurrentAccount)gridDebit.DataContext).ColporteurID;
                objC.CampaignID = ((CurrentAccount)gridDebit.DataContext).CampaignID;
                objC.PeriodID = ((CurrentAccount)gridDebit.DataContext).PeriodID;
                objC.Description = ((CurrentAccount)gridDebit.DataContext).Description;
                objC.Debit = ((CurrentAccount)gridDebit.DataContext).Debit;
                objC.Credit = 0;
    
    
                objC.Add(cx);
    
              }
    
            
          }
          LodGridDebitt();
          debitTextBox.Text = "";
          descriptionTextBox.Text = "";
    
          if (ckCheckAll.IsChecked == true)
            ckCheckAll.IsChecked = false;
        }
    
    sexta-feira, 11 de junho de 2010 13:45

Respostas

  • Moizes,

    Tenho algo parecido em um projeto WPF, sugiro que voce crie uma observableCollection, e que voce utilize o evento Checked e Unchecked no Ckeckbox, ai quando o cara checkar o checkbox voce adiciona o elemento no observableCollection, caso ele de unckeck voce remove no observableCollection, eh bem simples e objetiva essa solucao.

    sexta-feira, 11 de junho de 2010 16:04