2016-06-10 7 views
2

Ich habe eine CheckBoxList, die enthalten dynamische data.Now i erhalten möchten die Liste der ausgewählten Artikel aus CheckBoxList erhalten. Ich verwende folgenden Code.Wie CheckedListBox ausgewählt Itemtext in Windows Forms

for (int i = 0; i < chkTblListDb001.Items.Count; i++) 
{ 
    if (chkTblListDb001.GetItemChecked(i)) 
    { 
      FirstTableSelectedColumns += chkTblListDb001.Items[i].ToString() + ","; 
      MessageBox.Show(FirstTableSelectedColumns); 
    } 
} 

aber ist return (in FirstTableSelectedColumns Variable) "System.Data.DataRowView, System.Data.DataRowView"

Wenn ich den Code bin mit

string test = "you've selected :"; 

foreach (ListItem item in theCheckBoxList.Items) 
{ 
    test += item.Selected ? item.Value + ", " : ""; 
} 
labelResult.Text = test; 

seine gib mir der folgende Fehler,

ListItem nicht gefunden.

+1

Sie müssen zeigen, wie Sie diese Liste binden, aber im Grunde, werden Sie müssen gegossen 'chkTblListDb001.Items [i]' auf 'DataRowView' und dann bekommen die' DataRowView' Spalte, die Sie zeigen wollen, so etwas wie '((DataRowView) chkTblListDb001.Items [i]) [0] .ToString()' – Pikoh

+0

Windows Forms hat kein CheckBoxList-Steuerelement. Meinst du "CheckedListBox"? –

+0

ja @ Reza Aghaei ich meine, war CheckedListBox. –

Antwort

1

Lösung ist ((DataRowView) chkTblListDb001.Items [i]) [0] .ToString()

string FirstTableSelectedColumns = ""; 
     for (int i = 0; i < chkTblListDb001.Items.Count; i++) 
      { 
       if (chkTblListDb001.GetItemChecked(i)) 
       { 
       //FirstTableSelectedColumns += chkTblListDb001.Items[i].ToString() + ","; 
        FirstTableSelectedColumns += ((DataRowView)chkTblListDb001.Items[i])[0].ToString() + ","; 
        MessageBox.Show(FirstTableSelectedColumns); 
       } 
      } 

Thankx

+1

Verwenden 'GetItemText' den Text zu finden und' string.Join' verwenden, um Elemente einer String-Liste zu verbinden. –

2

Um Text eines @Pikoh zu erhalten Artikel in CheckedListBox können Sie GetItemText verwenden.

Es spielt keine Rolle, was die Art des Artikels ist, wenn Sie DataSource und DisplayMember verwendet haben, verwendet es DisplayMember Text zurückzukehren, verwendet es sonst ToString Verfahren nach Punkt. Hier

ist ein Beispiel dafür, was Sie suchen, eine durch Kommata getrennte Liste von aufgegebenem Itemtexte:

var texts = this.checkedListBox1.CheckedItems.Cast<object>() 
       .Select(x => this.checkedListBox1.GetItemText(x)); 

MessageBox.Show(string.Join(",", texts)); 
0

Verwenden CheckedItems Methode.

 StringBuilder sbCheckedItems = new StringBuilder(); 

     foreach (var cbx in chkTblListDb001.CheckedItems) 
     { 
      sbCheckedItems.Append(cbx.ToString() + ","); 
     } 
     MessageBox.Show(sbCheckedItems.ToString()); 
+0

Wenn die Art des Artikels ein Objekt ist, dann werden Sie Ergebnis von 'ToString()' dem Objekt, die in diesem Fall für OP 'System.Data.DataRowView' erhalten, da es scheint er verwendet ein' DataTable' als 'DataSource'. –

0

die folgenden Versuchen Sie, fügen Sie diese Klasse zu einem Projekt

using System.Collections.Generic; 
using System.Linq; 
using System.Windows.Forms; 
public static class CheckedListBoxExtensions 
{ 
    public static string CheckedItemsJoined(this CheckedListBox sender) 
    { 
     var Result = from singleItem in sender.Items.OfType<string>().Where(
         (item, index) => 
         { 
          return sender.GetItemChecked(index); 
         } 
        ) 
        select singleItem; 

     return string.Join(",", Result.ToList<string>()); 
    } 
} 

nun in der Form, verwenden Sie Code nach diesem Vorbild (dh die Namen der Steuerelemente ändern müssen Steuerelemente anzupassen.

someLabel.Text = checkedListBox1.CheckedItemsJoined(); 

Hoffnung das ist, was Sie nach.

+0

Wenn das Element nicht vom Typ der Zeichenfolge ist, gibt dieser Code nichts zurück. Die stabilste Lösung ist die 'GetItemText' Methode. –