2016-10-30 83 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