2016-06-10 35 views
2

我有一個CheckBoxList包含動態數據。現在我想從CheckBoxList中獲取所選項目的列表。我正在使用以下代碼。如何獲取CheckedListBox在Windows窗體中選擇的項目文本

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

,但回報(在FirstTableSelectedColumns變量) 「System.Data.DataRowView,System.Data.DataRowView,」

當我使用這個代碼

string test = "you've selected :"; 

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

它給我出現以下錯誤

ListItem not found。

+1

你必須告訴你如何綁定該列表中,但基本上,你會需要將'chkTblListDb001.Items [i]'強制轉換爲'DataRowView',然後獲得想要顯示的'DataRowView'列,例如'((DataRowView)chkTblListDb001.Items [i])[0] .ToString()' – Pikoh

+0

Windows窗體沒有「CheckBoxList」控件。你的意思是'CheckedListBox'? –

+0

是@ Reza Aghaei我的意思是CheckedListBox。 –

回答

1

解決方案是((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到@Pikoh

+1

使用'GetItemText'來查找文本並使用'string.Join'來加入字符串列表項。 –

2

要得到的文本您可以使用GetItemText

不要緊,什麼是項目的類型,如果你已經使用DataSourceDisplayMember它使用DisplayMember返回文本,否則使用項目的ToString方法。

下面是你在找什麼,用逗號分隔的檢查項目文本的列表的示例:

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

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

使用CheckedItems方法。

 StringBuilder sbCheckedItems = new StringBuilder(); 

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

如果Item的類型是一個對象,那麼您將收到對象的ToString()的結果,在這種情況下,對於OP來說,它是'System.Data.DataRowView',因爲他似乎在使用'DataTable'作爲'DataSource'。 –

0

試試下面這個類在這之後建模(這意味着你需要改變控件的名稱,以匹配您的控件的形式,使用的代碼添加到您的項目

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>()); 
    } 
} 

現在。

someLabel.Text = checkedListBox1.CheckedItemsJoined(); 

希望這是你所追求的。

+0

如果該項目不是字符串類型,則此代碼不會返回任何內容。最穩定的解決方案是使用'GetItemText'方法。 –

相關問題