2 lucifer635 Lucifer635 于 2015.07.13 13:32 提问

C# TreeView 单击选中节点不能触发事件

private void LoadList()
{
if (trvGroup.Nodes.Count == 0)
{
lvContact.Clear();
return;
}
if (trvGroup.SelectedNode.Index >=0)
{
string strGroup = trvGroup.SelectedNode.Text;
try
{
lvContact.Clear();
lvContact.Columns.Add("姓名", 100);
lvContact.Columns.Add("工作单位", 150);
lvContact.Columns.Add("联系电话", 100);
lvContact.Columns.Add("电子邮箱", 150);
SqlConnection conn = new SqlConnection(strConn);
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "select 编号,姓名,工作单位,联系电话,电子邮箱 from 联系人 where 组别='" + strGroup + "'";
conn.Open();
SqlDataReader sdr = cmd.ExecuteReader();

                while (sdr.Read())
                {
                    ListViewItem lvi = new ListViewItem();
                    lvi.Text = sdr["姓名"].ToString();
                    lvi.SubItems.Add(sdr["工作单位"].ToString());
                    lvi.SubItems.Add(sdr["联系电话"].ToString());
                    lvi.SubItems.Add(sdr["电子邮箱"].ToString());
                    lvi.Tag = sdr["编号"];
                    lvi.ImageIndex = 0;
                    lvContact.Items.Add(lvi);
                }

                sdr.Close();
                conn.Close();
            }
            catch
            { }
        }
    }
    private void trvGroup_AfterSelect(object sender, TreeViewEventArgs e)
    {
        LoadList();
    }


    private void trvGroup_MouseDown(object sender, MouseEventArgs e)
    {
        if ((sender as TreeView) != null)
        {
            trvGroup.SelectedNode = trvGroup.GetNodeAt(e.X, e.Y);
        }
    }

    private void lvContact_SelectedIndexChanged(object sender, EventArgs e)
    {

    }


            我就是在treeview中但一个节点,然后把它对应在数据库中的内容显示在一个listview中。但是结果listview一直显示第一个节点的内容,单击之后没有反应。
            求大神解救啊,小弟最近刚刚自学C#,很多东西还不太明白。

3个回答

Tiger_Zhao
Tiger_Zhao   Rxr 2015.07.13 14:56
已采纳

你一会儿用trvGroup一会儿用treeview,是不是多个TreeView的事件关联到同一个处理过程中了?

xxwwdd
xxwwdd   2015.07.13 15:10

LoadList()是从trvGroup对应的树控件来获取组信息,而treeview_MouseDown中使用的是treeview对应的树控件,2个不一致,所以不管如何操作,listview值不会变的
此外
if (trvGroup.SelectedNode.Index >= 0)这个判断也存在问题,应该采用if (trvGroup.SelectedNode!=null)

Lucifer635
Lucifer635   2015.07.13 20:12

楼上两位大大,实在抱歉,是小弟粘贴的时候出了错,现在重新粘贴了一遍。我只用了一个treeview控件,名字是trvGroup,但是问题还在。求各路大神解救啊。

Lucifer635
Lucifer635 回复Tiger_Zhao: 多谢大大,问题解决了。确实没关联。vs提示是0引用。可能是因为改过控件的名字造成的。
2 年多之前 回复
Lucifer635
Lucifer635 回复Tiger_Zhao: 我在trvGroup_AfterSelect()和trvGroup_MouseDown中都加了MessageBox,单击之后,没有反应。这个是什么情况,大神求教啊~
2 年多之前 回复
Tiger_Zhao
Tiger_Zhao 你的事件和过程关联了没有。在trvGroup_AfterSelect()中加个MessageBox提示,看该过程调用了没有。
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片