如何从CheckedListBox获取已检查项的字符串值?

时间:2015-12-22 18:59:21

标签: c# winforms checkedlistbox datarowview

我有这段代码试图从CheckedListBox中提取显示值:

CheckedListBox.CheckedItemCollection selectedUnits = checkedListBoxUnits.CheckedItems;
_selectedUnit = selectedUnits[0].ToString();

...但它不起作用 - " _selectedUnit"的价值,而不是" platypus "应该是," System.Data.DataRowView "。

如何从这个复杂的对象中哄骗字符串值?

更新

我不确定user2946329想要看到什么bzg。我的CheckedListBox,但这是它的填充方式:

private void PopulateUnits()
{
    using (SqlConnection con = new SqlConnection(ReportRunnerConstsAndUtils.CPSConnStr))
    {
        using (SqlCommand cmd = new SqlCommand(ReportRunnerConstsAndUtils.SelectUnitsQuery, con))
        {
            cmd.CommandType = CommandType.Text;
            using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
            {
                DataTable dt = new DataTable();
                sda.Fill(dt);
                ((ListBox)checkedListBoxUnits).DataSource = dt;
                ((ListBox)checkedListBoxUnits).DisplayMember = "Unit";
                ((ListBox)checkedListBoxUnits).ValueMember = "Unit";
            }
        }
    }
}

如果有任何遗漏可以帮助您,请告诉我。

4 个答案:

答案 0 :(得分:2)

它应该是这样的:

DataRowView dr = checkedListBoxUnits.CheckedItems[0] as DataRowView;
string Name = dr["Unit"].ToString();

答案 1 :(得分:1)

根据您获得的字符串("System.Data.DataRowView")判断,您使用附加了数据源的CheckListBox。如果是这种情况,在CheckedItems中你真的得到DataRowViews ..因此字符串,因为它的ToString()返回类名。您需要按列名称或索引访问DataRowView中的数据。

答案 2 :(得分:1)

_selectedUnit = ((DataRowView)selectedUnits[0])["Name"].ToString();

关键是在访问项目之前对项目进行类型转换...

答案 3 :(得分:0)

结合user2946329的答案和Resharper的贡献,我最终使用的代码是:

String _selectedUnit;
. . .
DataRowView dr = checkedListBoxUnits.CheckedItems[0] as DataRowView;
if (dr != null) _selectedUnit = dr["Unit"].ToString();

(Resharper抱怨可能存在空引用问题,因此将“if(dr!= null)”爵士乐添加到最后一行。