如何从 CheckedListBox 中获取选中项的字符串值?
How can I get the string value of a checked item from a CheckedListBox?
我有这段代码来尝试从 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";
}
}
}
}
如果有任何遗漏可以帮助您,请告诉我。
应该是这样的:
DataRowView dr = checkedListBoxUnits.CheckedItems[0] as DataRowView;
string Name = dr["Unit"].ToString();
根据您获得的字符串 ("System.Data.DataRowView"
) 判断,您使用的是附加了数据源的 CheckListBox
。如果是这样的话,在 CheckedItems
你真的得到 DataRowViews
.. 因此字符串,因为它的 ToString() returns class 名称。您将需要通过列名或索引从 DataRowView
访问数据。
_selectedUnit = ((DataRowView)selectedUnits[0])["Name"].ToString();
关键是在访问项目之前对其进行类型转换...
结合 user2946329 的回答和 Resharper 的贡献,我最终使用的代码是:
String _selectedUnit;
. . .
DataRowView dr = checkedListBoxUnits.CheckedItems[0] as DataRowView;
if (dr != null) _selectedUnit = dr["Unit"].ToString();
(Resharper 抱怨可能存在空引用问题,因此在最后一行添加了 "if (dr != null)" jazz。
我有这段代码来尝试从 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";
}
}
}
}
如果有任何遗漏可以帮助您,请告诉我。
应该是这样的:
DataRowView dr = checkedListBoxUnits.CheckedItems[0] as DataRowView;
string Name = dr["Unit"].ToString();
根据您获得的字符串 ("System.Data.DataRowView"
) 判断,您使用的是附加了数据源的 CheckListBox
。如果是这样的话,在 CheckedItems
你真的得到 DataRowViews
.. 因此字符串,因为它的 ToString() returns class 名称。您将需要通过列名或索引从 DataRowView
访问数据。
_selectedUnit = ((DataRowView)selectedUnits[0])["Name"].ToString();
关键是在访问项目之前对其进行类型转换...
结合 user2946329 的回答和 Resharper 的贡献,我最终使用的代码是:
String _selectedUnit;
. . .
DataRowView dr = checkedListBoxUnits.CheckedItems[0] as DataRowView;
if (dr != null) _selectedUnit = dr["Unit"].ToString();
(Resharper 抱怨可能存在空引用问题,因此在最后一行添加了 "if (dr != null)" jazz。