Привязать DataGridTextColumn с расчетом в MVVM - PullRequest
0 голосов
/ 21 ноября 2011

Я новичок в Silverlight MVVM, я создаю проект, в котором привязываю данные к DataGrid.

Вот моя структура базы данных:

  • tblAuthorizationVarification (AuthorizationVarificationid, AuthorizationRequestid, number)

  • tblAuthorizationRequest (запрос авторизации, имя)

  • tblAuthorizationVarificationDetails (DetailId, Авторизация, запрос, сумма)

Я хочу показать Итоговую сумму в gridview для всех авторизаций.

Ниже мой код, в ViewModel классе, я получаю tblAuthorizationRequest от tblAuthorizationVarification:

PagedCollectionView _AuthorizationVarificationList;

public PagedCollectionView AuthorizationVarificationList
{
  get { return _AuthorizationVarificationList; }
  set 
  {
     _AuthorizationVarificationList = value;
     OnPropertyChanged("AuthorizationVarificationList"); }
  }

  private void GetVarifications()
  {
    IsBusy = true;
    LoadOperation<AuthorizationVerification> loadOp = 
                          objContext.Load(objContext.GetCreditNotesQuery());

    loadOp.Completed += (sender, e) =>
    {
       IEnumerable<AuthorizationVerification> op = 
               ((LoadOperation<AuthorizationVerification>)sender).Entities;
       PagedCollectionView view = new PagedCollectionView(op);
       this.AuthorizationVarificationList = view;
       cnt = cnt - 1;
       if (cnt <= 0)
         IsBusy = false;
    };
  }

AuthorizationVarificationList привязывается в Gridview как

<sdk:DataGrid x:Name="grdCreditNotes" 
    ItemsSource="{Binding Path=AuthorizationVarificationList}" 
    SelectedItem="{Binding Path=SelectedCreditNote, Mode=TwoWay}" 
    AutoGenerateColumns="False" IsReadOnly="True" Grid.Row="2" 
    VerticalAlignment="Stretch" Margin="0,0,0,0">

    <sdk:DataGrid.Columns>
      <sdk:DataGridTextColumn Header="Credit No" 
         Binding="{Binding Path=AuthorizationVerificationId}" Width="200"/>

      <sdk:DataGridTextColumn Header="Amount" 
         Binding="{Binding Path=AuthorizationRequest.Amount}" MinWidth="100" 
         Width="*"/>

    </sdk:DataGrid.Columns>    
</sdk:DataGrid>

Что я могу сделать для отображения суммы суммы определенного Авторизации в этом поле сетки?

Ответы [ 2 ]

1 голос
/ 23 ноября 2011

Как я уже предлагал, вы можете создать класс модели представления для элемента коллекции и заполнить его в порядке.

public class VerificationViewModel
{
    public int AuthorizationVerificationId { get; set; }

    public double Amount { get; set; }
}

Затем используйте LINQ-запрос, который группирует коллекцию и возвращает обобщенные элементы:

loadOp.Completed += (sender, e) =>
{
   IEnumerable<AuthorizationVerification> op = 
           ((LoadOperation<AuthorizationVerification>)sender).Entities;

   var models = op.GroupBy(item => item.AuthorizationVerificationId)
                  .Select(g => new VerificationViewModel
                                { 
                                    AuthorizationVerificationId = g.Key, 
                                    Amount = g.Sum(gi => gi.Amount) 
                                })
                  .ToList();

   PagedCollectionView view = new PagedCollectionView(models);
   // Everything else is the same
}

//Also change the type of the property which is bound to SelectedItem
public VerificationViewModel SelectedCreditNote { get; set; }

И изменить путь привязки второго столбца:

<sdk:DataGrid.Columns>
  <sdk:DataGridTextColumn Header="Credit No" 
     Binding="{Binding Path=AuthorizationVerificationId}" Width="200"/>

  <sdk:DataGridTextColumn Header="Amount" 
     Binding="{Binding Path=Amount}" MinWidth="100" Width="*"/>

</sdk:DataGrid.Columns>   

Этот код должен вычислять сумму суммы для каждого идентификатора. Если вам нужна другая агрегация, вы можете изменить запрос linq.

0 голосов
/ 23 ноября 2011

Если я правильно понимаю, вы после Сводной строки? Если это так, пожалуйста, проверьте следующую ссылку http://leeontech.wordpress.com/2010/02/01/summary-row-in-datagrid/. Вам может понадобиться немного лучше сформировать объекты модели за моделями представления (редко рекомендуется показывать модели (в данном случае DTO) непосредственно представлению).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...