2016-10-30 84 views
1

我已经登录和退出历史列表,WPF - 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

要从1项创建新的2项,并压平他们。使用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