有个ListView,如listview1。选中listview1中的多项内容后,右键“修改”菜单。
弹出一个新窗体处理修改功能。修改后的值再次传到原窗体中,以达到批量修改的效果。这个功能ListView能否实现呢,怎样实现呢?

解决方案 »

  1.   

    这个就是批量编辑的功能,最好不要从listview1 中出发。觉得你的出发点有点不对,你从listview1 出发,对应的只有一条,而你要选择多条一次解决问题,思路是这样的,看你自己的情况了,我弄过你这个功能,换个思路很简单的。
      

  2.   

    可以的。
    先说传值
    在子窗体构建时将主窗体传进来。
    ParentFrm pfrm;
    public ChildFrm(ParentFrm p)//传进父窗体
    {
       pfrm=p;
    }
    主窗体调用时将自身传进去
    class ParentFrm
    {
       void OpenNewFrm()
       {
         new ChildFrm(this).Show();
       }
    }
    这样子窗体就可以调用父窗体中的public方法、属性等。
            void ChangeValue()
            {
                //以下注释中的方法是在虚模式中的实现
                //List<ListViewItem> lvis = new List<ListViewItem>();//用于保存被选择的泛型数组
                //for (int i = 0; i < listView1.Items.Count; i++)
                //{
                //    if (listView1.Items[i].Checked)
                //        lvis.Add(listView1.Items[i]);//如果项被选择,则添加到lvis中
                //}
                //获得所有被选择的项
                ListView.CheckedListViewItemCollection clic = new ListView.CheckedListViewItemCollection(listView1);
                foreach (ListViewItem lvi in clic)
                {
                    //执行操作
                }
            }
    楼主不要上来就发问,多看看控件的方法、属性介绍,省时省心,比你发问要容易,实在搞不出来时再发问也不迟呀。
      

  3.   

    我还是没有看懂什么是“批量修改”。如果是这样:第一个页面只是选择,转入第二个页面只是在普通显示模板内给出一堆TextBox、CheckBox之类可输入控件,然后第二个页面点“确定”之后重新转入第一个显示页面。那么这个并不涉及ListView本身已经设计好的在单一页面上进行编辑的功能,只是你自己另外搞成多个页面切换的asp风格程序了。
      

  4.   

    sorry,我还以为在asp.net论坛!winform实在是太简单了,懒得回。
      

  5.   

    在ContextMenuStrip的Opening事件中检查listview是否有选中项
    弹出窗体,通过构造函数等传值
    委托实现父窗体数据更新