2016-10-30 3 views
1

Я Вход и Выход списка истории,МОФ - C#: Вход и Выход История

var data = service.PostLogDetails(UserID); 

Он вернется, как показывает изображение,

enter image description here

var listLogInItems = (from A in data orderby A.FirstName select new { Login = "Login", Name = A.FirstName + " " + A.SurName, ID = A.Id, LoginDate = A.LogInTime.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)[0], LoginTime = A.LogInTime.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)[1] + " " + A.LogInTime.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)[2], Comments = "Never delete this Archive" }).Distinct(); 
     var listLogOutItems = (from A in data orderby A.FirstName select new { Login = "Logout", Name = A.FirstName + " " + A.SurName, ID = A.Id, LogoutDate = (A.LogOutTime ?? "Unknown").Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)[0], LogoutTime = A.LogOutTime.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)[1] + " " + A.LogOutTime.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)[2], Comments = "Never delete this Archive" }).Distinct(); 

listView1.ItemsSource = ? 

тогда хотите для отображения этой истории входа и выхода в Combobox.

<ListView Margin="0,102,0,0" 
 
        HorizontalAlignment="Left" 
 
       Name="listView1" VerticalAlignment="Top" 
 
          ItemsSource="{Binding}" 
 
          IsSynchronizedWithCurrentItem="True" Width="800" Height="498"> 
 
        <ListView.View> 
 
         <GridView> 
 
          <GridView.Columns> 
 
           <GridViewColumn> 
 
            <GridViewColumn.CellTemplate> 
 
             <DataTemplate> 
 
              <CheckBox Tag="{Binding login_Id}" IsChecked="{Binding RelativeSource={RelativeSource AncestorType=ListViewItem},Path=IsSelected}" /> 
 
             </DataTemplate> 
 
            </GridViewColumn.CellTemplate> 
 
           </GridViewColumn> 
 
           <GridViewColumn Width="180px" DisplayMemberBinding="{Binding Name}" /> 
 
           <GridViewColumn Width="165px" DisplayMemberBinding="{Binding LoginDate}" /> 
 
           <GridViewColumn Width="160px" DisplayMemberBinding="{Binding LoginTime}" /> 
 
           <GridViewColumn Width="160px" DisplayMemberBinding="{Binding LoginStatus}" /> 
 
           <GridViewColumn Width="110px" DisplayMemberBinding="{Binding Comments}" /> 
 
          </GridView.Columns> 
 
         </GridView> 
 
        </ListView.View> 
 
       </ListView>

Как я могу связать оба вход и выход истории в выпадающем списке? Я хочу, чтобы вывод как ниже вид изображения, как,

enter image description here

ответ

1

Вы хотите создать новые 2 пунктов с 1 пункта и придавить их. Используйте SelectMany.

Я сделал образец для консольного приложения. Я использовал стиль метода LINQ, потому что я не знаком с типом запроса.

Я думаю, что DateTime.Parse() (или DateTime.TryParse()) лучше, чем разделение строки самостоятельно для синтаксического анализа.

var data = new[] 
{ 
    new 
    { 
     FirstName = "firstname", 
     SurName = "surname", 
     Id = "id", 
     LogInTime = DateTime.Now.ToString(), 
     LogOutTime = DateTime.Now.ToString() 
    } 
}; 

var items = data.SelectMany((x) => new[] 
{ 
    new 
    { 
     UserName = x.FirstName + " " + x.SurName, 
     AccessDate = DateTime.Parse(x.LogInTime).ToShortDateString(), 
     AccessTimeFrame = DateTime.Parse(x.LogInTime).ToShortTimeString(), 
     Action = "Login", 
     Comment = "Never delete this Archive" 
    }, 
    new 
    { 
     UserName = x.FirstName + " " + x.SurName, 
     AccessDate = DateTime.Parse(x.LogOutTime).ToShortDateString(), 
     AccessTimeFrame = DateTime.Parse(x.LogOutTime).ToShortTimeString(), 
     Action = "Logout", 
     Comment = "Never delete this Archive" 
    } 
}) 
.Distinct() 
.OrderBy((x) => x.UserName); 

foreach (var item in items) 
{ 
    Console.WriteLine(item); 
} 
+0

@calctuaroid благодарит вас за повторную передачу. Если x.LogOutTime возвращает null, то как я могу обработать это, например, вернуть «Неизвестный»? – lashja

+1

@AbhilashJA Определите 'DateTime parsed', а затем используйте' DateTime.TryParse() '. Например, 'AccessDate = (DateTime.TryParse (x.LogOutTime, out parsed))? parsed.ToShortDateString(): «Неизвестно» ' – cactuaroid

Смежные вопросы