c#listbox选择的更改行事件有效,但未选中行

时间:2014-05-29 08:31:15

标签: c# winforms datagridview

我有问题。我有三个主要类别的按钮,当您单击其中一个按钮时,ListBox中会出现一些内容,并显示带有子类别的按钮。如果单击子类别,则ListBox中会出现不同的内容。

我有类似的方法:

private void DisplayPeople(string category); //I use it ParentClicked and SubClicked
private void ParentClicked(object sender, EventArgs e); //for parent category
private void SubCatClicked(object sender, EventArgs e); //for subcategory
myListBox.SelectedIndexChanged+= new EventHandler(selectedIndexChange); 

当您在列表框中选择某个时,它应该出现在我的DataGridView中,它可以完美地运行。但是,当我点击按钮并且事情出现在列表框中时,我就像 myListBox.ClearSelected(); my.SelectedItem = null; 一样,我看到NOTHING是在开头选择,但仍然SelectedIndexChange事件工作,因为它将第一行添加到我的DataGridView。我不明白为什么,你能帮助我吗?

更多人: 在我的程序中,当你在ListBox中选择 sth 时,它会出现在DataGridView中。当我设置 myListBox.ClearSelected(); my.SelectedItem = null; 时,在开始时没有选择任何内容,但 SelectedIndexChange 事件有效且首先列表框中的内容已添加到 DataGridView 。我不想要它,我希望它只在用户选择时出现在datagridview中。

现在我的事情HANDLER看起来像这样:

private void selectedIndexChange(object sender, EventArgs e)
{
  Person person = (Person)MyListBox.SelectedItem;
  if (MyListBox.Items.Count > 0 && MyListBox.SelectedItems.Count > 0)
        {
            Basket.Add(person);
            dataGridView1.DataSource = Basket;
        }
    }

PS。 我解决了问题。我这样做,当用户点击ListBox并且出现SelectedIndexChange事件时,列表框中的东西被添加到DataGridView。但也许有更简单,更漂亮的解决方案?

2 个答案:

答案 0 :(得分:1)

SelectedIndexChanged应该如何运作。

您需要做的是将myListBox.SelectedIndex与-1或myListBox.SelectedItemnull进行比较,看看是否在ListBox中实际选择了某些内容。

http://msdn.microsoft.com/en-us/library/system.windows.forms.listbox.selectedindexchanged(v=vs.110).aspx

答案 1 :(得分:1)

试试这个

 private void myListBox_SelectedIndexChanged(object sender, EventArgs e)
  {
        if (myListBox.Items.Count > 0 && myListBox.SelectedItems.Count > 0)
        {
            //Do something in DatagridView
        }
        else
        {
            //clear the gridview
        }           
   }