Autor Beitrag
c#ler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 176
Erhaltene Danke: 1

Win7 64Bit
C#, VBA, VS2013 Ultimate
BeitragVerfasst: Di 23.07.13 10:35 
Guten Tag,
ich komme nicht weiter.

Vorgehen:
Ich hole mir ein Dataset mit person-Id's und dazugehörigen person-Namen.
In einer checkedlistBox sollen die Namen angezeigt werden.
Ich wähle 2-3 items aus und drücke im Form auf meinen Übergabe Button.
Nun die Crux an der Sache.
Es sollen die Id's der ausgewählten Items an meine Übergabefunktion übergeben werden.

Kurz:
In meiner Checkedlistbox sollen die Namen angezeigt werden.
Nach der Auswahl sollen die Id's (ACHTUNG: nicht die Indexe) übergeben werden.

Ansatz:
Ist es besser für jedes Item in der checkedListbox ein Objekt zu erstellen und es mit Tag und Text zu versehen oder gibt es eine bessere Variante.
(Mit dieser habe ich es versucht, bin aber mit meinem Wissen schnell an meine Grenzen gestoßen)

Bitte Hilfe
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 23.07.13 10:45 
Dein Gedankengang ist richtig und das passende Objekt hast du schon du must kein neues Erfinden. Binde einfach deine DataTable an die ListBox.

ausblenden C#-Quelltext
1:
2:
3:
((ListBox)MeineLiebeCheckedlistbox).DataSource = meineLiebeDataTable;
((ListBox)MeineLiebeCheckedlistbox).DisplayMember = "Name";
((ListBox)MeineLiebeCheckedlistbox).ValueMember = "Id";


Zum Auslesen der Daten, das du wahrscheinlich duch das iterieren über Items machst, kannst du jedes Item dann in ein DataRowView Objekt casten. Wenn du typisiertes Dataset hast dann in die entsprechende typisierte Variante.
c#ler Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 176
Erhaltene Danke: 1

Win7 64Bit
C#, VBA, VS2013 Ultimate
BeitragVerfasst: Di 23.07.13 11:15 
user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:


Zum Auslesen der Daten, das du wahrscheinlich duch das iterieren über Items machst, kannst du jedes Item dann in ein DataRowView Objekt casten. Wenn du typisiertes Dataset hast dann in die entsprechende typisierte Variante.


Danke für das die Info zum Binding... habe das bereits mit Grids so gemacht, habe aber nicht gewusst, dass das mit der Listbox auch funktioniert.
Ich dachte dazu müsste ich eine rtb verwenden.

Hört sich das auslesen nur kompliziert an oder fehlt mir wirklich soviel wissen... :)
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 23.07.13 11:41 
Zitat:
Danke für das die Info zum Binding... habe das bereits mit Grids so gemacht, habe aber nicht gewusst, dass das mit der Listbox auch funktioniert.


Databinding sollte mit jedem Control gehen. Eine CheckedListBox ist eher ein Fremdkörper in Windows, heißt es ist eigentlich kein typisches Windows Control. Darum verhält es sich nicht ganz konform. Die Databinding Properties sind nur versteckt aber natürlich da. Das gezeigte casten auf Listbox ist eigentlich auch unnötig.

Zitat:
Hört sich das auslesen nur kompliziert an oder fehlt mir wirklich soviel wissen... :)


Ist nicht kompliziert. Die Checkbox ist aber halt nur drangestrickt an die Listbox und ist leider nicht über irgendeinen ~natürlichen~ Weg auslesbar.
Beispiel

ausblenden C#-Quelltext
1:
2:
3:
4:
List<Int32> deineGechecktenIds = new List<Int32>();
for (int i = 0; i < checkedListBox1.Items.Count; i++)
   if (checkedListBox1.GetItemChecked(i))
      deineGechecktenIds.Add((Int32)(((DataRowView)checkedListBox1.Items[i])["Id"])); // Int32 für deine Id ist geraten


Einfacher und windowstypischer wäre eine ListBox mit Multiselektion.

Für diesen Beitrag haben gedankt: c#ler
c#ler Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 176
Erhaltene Danke: 1

Win7 64Bit
C#, VBA, VS2013 Ultimate
BeitragVerfasst: Di 23.07.13 15:01 
Ich habs jetzt.
Vielen Dank für die Hilfe, nächstes mal bin ich schlauer ;)
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
//Ids der Personlisten der Personlisten-Liste hinzufügen
List<Int32> checked = new List<Int32>();
for (int i = 0; i < checkedListBoxPerson.Items.Count; i++)
{
    //Wenn Liste markiert
    if (checkedListBoxPerson.GetItemChecked(i))
    {
        //Liste hinzufügen
        checked.Add((Int32)(((DataRowView)checkedListBoxPerson.Items[i])["Id"]));
    }
}

foreach (int id in checked)
{
    //Daten für das Personlisten SB holen
    var Daten = ServiceContainer.GetService<IROF>().GetRemoteObject<IPR>().HolePersonSB(id);

    using (var reportForm = Reporting.ReportVF.CreatePSBReportView(Daten))
    {
        reportForm.ShowDialog(this);
    }
}