2017-08-22 1 views
1

Also ich habe eine Liste von "Programme" und ich möchte es so machen, wenn ich eine Taste drücke, wird eine neue Reihe von "Programme" zu meinem DataGrid hinzugefügt, aber ich habe ein Problem Ich kann nicht reparieren, wenn ich eine neue Zeile hinzufüge die Anzahl der Programme beginnt bei Null Ich möchte es von der letzten Nummer fortsetzen.Zeile zu DataGrid hinzufügen nach vorherigen Werten

Hier ist, wie die Zeile hinzugefügt wird:

private void Add_download_Click(object sender, RoutedEventArgs e) 
{ 
    for (int a = 0; a < 1; a++) 
    { 
     PL.List_Programs.Add(UpdateList(a)); 
    } 
} 

private Programs UpdateList(int a) 
{ 
    Programs P = new Programs(); 

    //Add a way to get the number of currently downloading programs (e.g.: ProgramID + a) 
    int aAsIDNum = PL.ProgramList().IndexOf(); 

    //Both of these are used to toghter because I cant make a decimal random generator 
    double RndSizeGen = new Random().Next(10, 50); 
    int RndSizeGen1 = new Random().Next(1, 9); 

    //Generates a random number to be used as the progress precent 
    int RndProgressGen = new Random().Next(10, 80); 

    Programs _programs = new Programs 
    { 
     ProgramID = a, 
     Name = $"Program{a}", 
     Size = Convert.ToDouble($"{RndSizeGen}.{RndSizeGen1}"), 
     Progress = RndProgressGen 
    }; 

    //Returns the updated list of programs 
    return _programs; 
} 

Hier ist die Liste der „Programme:

public ObservableCollection<Programs> List_Programs {get; set;} 

public ObservableCollection<Programs> ProgramList() 
{ 

    List_Programs = new ObservableCollection<Programs> 
    { 
     new Programs { _programid = 1, _name = "Program0", _size = 5.8, _progress = 100 }, 
     new Programs { _programid = 2, _name = "Program1", _size = 7.1, _progress = 36 }, 
     new Programs { _programid = 3, _name = "Program2", _size = 1.4, _progress = 44 }, 
     new Programs { _programid = 4, _name = "Program3", _size = 6.5, _progress = 100 }, 
     new Programs { _programid = 5, _name = "Program4", _size = 2.5, _progress = 89 }, 
     new Programs { _programid = 6, _name = "Program5", _size = 9.6, _progress = 68 }, 
     new Programs { _programid = 7, _name = "Program6", _size = 5.3, _progress = 90 }, 
     new Programs { _programid = 8, _name = "Program7", _size = 2.2, _progress = 100 }, 
     new Programs { _programid = 9, _name = "Program8", _size = 83.7, _progress = 18 } 
    }; 

    return List_Programs; 
} 

Und hier sind die Variablen, die ich verwendet:

public class Programs : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    public void OnProperyChanged(string PropertyName) 
    { 
     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(PropertyName)); 
    } 

    public int _programid; 
    public int ProgramID 
    { 
     get { return _programid; } 
     set 
     { 
      _programid = value; 
      OnProperyChanged(nameof(ProgramID)); 
     } 
    } 

    public string _name; 
    public string Name 
    { 
     get { return _name; } 
     set 
     { 
      _name = value; 
      OnProperyChanged(nameof(Name)); 
     } 
    } 

    public double _size; 
    public double Size 
    { 
     get { return _size; } 
     set 
     { 
      _size = value; 
      OnProperyChanged(nameof(Size)); 
     } 
    } 

    public double _progress; 
    public double Progress 
    { 
     get { return _progress; } 
     set 
     { 
      _progress = value; 
      OnProperyChanged(nameof(Progress)); 
     } 
    } 

    public ICollectionView ProgramsView { get; set; } 
} 

Datagrid/XAML

<DataGrid x:Name="DG_List" AutoGenerateColumns="False" IsReadOnly="true" 
      ColumnWidth="*" Grid.Column="3" Grid.RowSpan="3"> 
</DataGrid > 

Bild als Referenz: Image for Reference

Sag mir, wenn etwas

Antwort

0
for (int a = 0; a < 1; a++) 
{ 
    PL.List_Programs.Add(UpdateList(a)); 
} 

diese Zeilen bedeuten, dass Sie immer ein neues Element erstellen mit 0 id fehlt . (for Schleife beginnt bei 0 und führt 1 Iteration)

, wenn Einzelteile nicht aus der Liste entfernt werden, können Sie List.Count Neuwert-ID übergeben:

PL.List_Programs.Add(UpdateList(PL.List_Programs.Count)) 

wenn Änderungen möglich sind, finden max id und nächste Nummer verwenden:

PL.List_Programs.Add(UpdateList(PL.List_Programs.Max(p=>p.ProgramID)+1)) 
+0

Ich bin irgendwie glücklich und traurig zugleich, weil ich für anderthalb Wochen an diesem Problem war und Sie haben es in 2 Minuten beantwortet. Vielen Dank sowieso –

0

Erhöhen Sie den Wert eines jedes Mal die Add_download_Click Ereignishandler aufgerufen wird:

private void Add_download_Click(object sender, RoutedEventArgs e) 
{ 
    int a = 10; 
    if (PL.List_Programs.Count > 0) 
    { 
     a = PL.List_Programs[PL.List_Programs.Count - 1].ProgramID + 1; 
    } 
    PL.List_Programs.Add(UpdateList(a)); 
} 
Verwandte Themen