如何从CheckedListBox中获取选中项的字符串值



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

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

但它不起作用-"_selectedUnit"的值不是应该的"鸭嘴兽",而是"System.DataDataRowView"。

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

更新

我不确定用户2946329到底想看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";
            }
        }
    }
}

如果缺少什么可以帮助你的东西,请告诉我。

应该是这样的:

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

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

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

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

结合用户2946329的回答和Resharper的贡献,我最终使用的代码是:

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

(Resharper抱怨可能存在null引用问题,因此在最后一行添加了"if(dr!=null)"jazz。

相关内容

  • 没有找到相关文章

最新更新