1

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

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

...但它不起作用 - “_selectedUnit”的值,而不是应有的“鸭嘴兽”,是“ 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

4 回答 4

2

它应该是这样的:

DataRowView dr = checkedListBoxUnits.CheckedItems[0] as DataRowView;
string Name = dr["Unit"].ToString();
于 2015-12-22T19:13:08.890 回答
1

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

于 2015-12-22T19:49:09.620 回答
1
_selectedUnit = ((DataRowView)selectedUnits[0])["Name"].ToString();

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

于 2015-12-22T19:55:19.720 回答
0

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

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

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

于 2015-12-22T23:32:09.383 回答