我有一个用数据集中的数据创建的组合框
foreach(var item in ds.MiDESValues)
{
string comboboxtext = ds.MiDESValues.Rows[k][1].ToString();
sFactorCB.Items.Add(comboboxtext);
k++;
}
在选择更改事件上,它将使用该选择填充列表框
private void sFactors_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
string add = sFactorCB.SelectedValue.ToString();
var svalue = ds.MiDESValues.Rows[0][2].ToString();
int Svalue = int.Parse(svalue);
SValue.Add(svalue);
SelectionListBox.Items.Add(add);
SelectionBox.Add(add);
// when a new item is added to Selection list box, select it and show it
// this will keep the last item highlighted and as the list grows beyond
// the view of the list box, the last item will always be shown
SelectionListBox.SelectedIndex = SelectionListBox.Items.Count - 1;
SelectionListBox.ScrollIntoView(SelectionListBox.SelectedItem);
}
然后,该列表框用于填充下一页使用的列表框。如果我导航到下一页然后又导航回去,则组合框仍会显示我为此所做的最后一次选择,列表框将填充该值。
我已尝试在sFactors_SelectionChanged事件结束时将组合框的selectedindex设置为sFactorCB.SelectedIndex = -1;
,但得到System.NullReferenceException
。如何使组合框重置为未选择的项目状态?谢谢
答案 0 :(得分:0)
实际上,您做得正确。要清除选择,请将SelectedIndex设置为-1或SelectedItem设置为null。
问题在于,一旦执行此操作,就会再次调用sFactors_SelectionChanged,并且由于没有当前选择,因此SelectedValue属性为null,从而导致以下操作失败:
string add = sFactorCB.SelectedValue.ToString();
在未选择任何内容的情况下,如何解决此类问题取决于您的预期结果。最简单的操作是仅检查处理程序开始时未选择的任何内容,然后简单地返回。
private void sFactors_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (sFactorCB.SelectedIndex == -1 || sFactorCB.SelectedValue == null)
return;
string add = sFactorCB.SelectedValue.ToString();
...