2016-10-30 8 views
1

Ich habe Einloggen und History-Liste Abmelden,wpf - C#: Anmelden und Abmelden Geschichte

var data = service.PostLogDetails(UserID); 

Es zurückkehren, wie das Bild zeigt,

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 = ? 

dann wollen um diesen Anmelde- und Abmeldeverlauf in Combobox anzuzeigen.

<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>

Wie kann ich beide Login binden und Abmelden Geschichte in Combobox? Ich möchte die Ausgabe als Bild unten aussehen,

enter image description here

Antwort

1

Sie wollen von 1 Stück neue 2 Artikel erstellen und sie glätten. Verwenden Sie .

Ich habe ein Beispiel für die Konsolen-App gemacht. Ich habe den Methodenstil LINQ verwendet, weil ich den Abfragestil nicht kenne.

Ich denke, DateTime.Parse() (oder DateTime.TryParse()) ist besser als das Teilen von String selbst für das Parsen.

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 danke für mich wiederholen. Wenn x.LogOutTime null zurückgibt, wie kann ich das wie "Unbekannt" zurückgeben? – lashja

+1

@AbhilashJA Definieren Sie 'DateTime analysis' und verwenden Sie' DateTime.TryParse() '. Zum Beispiel, AccessDate = (DateTime.TryParse (x.LogOutTime, aus geparst))? parsed.ToShortDateString(): "Unbekannt" ' – cactuaroid

Verwandte Themen