ListView中显示的是用户名,点击添加按钮调出用户列表窗口,然后点击这些用户记录将用户添加到ListView中,用来显示用户列表的控件是datagrid,
我想每次打开用户列表窗口的时候,总是显示在ListView中没有显示的用户,如何才能做到呢?
如:
listview             datagrid         而不是 : datagrid 
小王                  小马                       小王
小看                  小刘                       小看
                                                 小马
                                                 小刘

解决方案 »

  1.   

    像你这种情况,最好datagrid用DataView做数据源,给DataView的RowFilter设置条件来过滤为好.
      

  2.   

    像你这种情况,最好datagrid用DataView做数据源,给DataView的RowFilter设置条件来过滤为好.
    ------------------
    这是个办法
      

  3.   

    你们一般是怎么做类似的问题的呢?listview+datagrid是不是最好的选择?
      

  4.   

    用什么控件无所谓,只要效果可以就行了.如果数据多的话,也可以这样来做:
    在DataGrid中选了一个记录成功的添加到ListView后可以在DataGrid中删除这个数据以达到不显示的目的,而当在Listview删除的时候再添加到DataGrid中就是了.这也是常用的方法.
      

  5.   

    恩,我也这么想过,但在datagrid中删除一行数据,代码是如何实现的?还是用dataview的RowFilter过滤?
      

  6.   

    在DataGrid中删除数据,实际上是删除DataGrid的数据源的数据,比如DataGrid的DataSource是DataTable的话,可以用这个DataTable来删除你要删除的数据.当然用RowFilter过滤是没有问题的.
      

  7.   

    RowFilter如何写多个条件?
    比如:RowFilter!="小王"   RowFilter!="小看"
      

  8.   

    试试:
    RowFilter="字段名<>'值1' and 字段名<>'值2'...."
      

  9.   

    我也遇到过这个问题,拿这个ListView做过一个小东西
    把我的代码粘上来,也许对你会有帮助
    我这个ListView里的数据都是从数据库查询出来的 一共查询了3个列
    代码 : public void listViewLoadData()
                //从数据库加载ListView里的数据
            {
                //连接字符串
                string strConn = "provider=SQLOLEDB;Data Source=(local);Initial   Catalog=UserMessage;user id=sa;password=";
                OleDbConnection conn = new OleDbConnection(strConn);
                string SQL = "select * from users";
                OleDbCommand cmd = conn.CreateCommand();
                cmd.CommandText = SQL;
                conn.Open();
                OleDbDataReader dr = cmd.ExecuteReader();
                ListViewItem item;            while (dr.Read())
                {
                    //我这个ListView控件的名字就是listViewUser
                    item = new ListViewItem(new string[] { dr["vname"].ToString().Trim(), dr["iid"].ToString().Trim(), dr["vkind"].ToString().Trim() }, -1);
                    listViewUser.Items.Add(item);
                }
                dr.Close();
    }dr["name"] dr["iid"] dr["vkind"] 就是一条数据中的3个列
    你照着我的写吧 写写就知道了 讲多了也迷糊
      

  10.   

    其实核心代码就
    ListViewItem item;            while (dr.Read())
                {
                    //我这个ListView控件的名字就是listViewUser
                    item = new ListViewItem(new string[] { dr["vname"].ToString().Trim(), dr["iid"].ToString().Trim(), dr["vkind"].ToString().Trim() }, -1);
                    listViewUser.Items.Add(item);
                }
    这段儿   看懂了就OK了
    还是不行加我QQ 5948710
    我把我做的项目发给你
      

  11.   

    bnjbl() 
    你的代码是把数据库中的记录添加到listview中显示出来,你没看清我的问题。不过还是谢谢你。hbxtlhx(平民百姓) 
    谢谢你的耐心和帮助,我的问题已解决了,新年快乐。
      

  12.   

    呵呵,还没等我我补充呢,再给点分我吧。
    用DataTable作为dataGrid数据源,如果是删除行:
    ds.Tables["table0"].Rows[dataGrid1.CurrentCell.RowNumber].Delete();//删除选中的行
    //datetable1.Rows[dataGrid1.CurrentCell.RowNumber].Delete();
    ds.Tables["table0"].AcceptChanges();
    //datetable1.AcceptChanges();
    如果是用筛选,则要用到DataView对象
    //也可使用ds.Tables["table0"].DefaultView.RowFilter 
    //这是DataTable默认的DefaultView对象
    DataView dv = new DataView();
    dv.Table = ds.Tables["table0"];
    dataGrid1.SetDataBinding(dv,"table0")//DataView作为DataGrid的数据源
    dv.AllowDelete = true;//允许删除
    //dv.AllowEdit = true;//允许编辑
    //dv.AllowNew = true;//允许添加新行
    dv.RowFilter = "姓名 like '%3' and 姓名<> 'ddd3'";//筛选条件,SQL语法
    dv.RowStateFilter = DataViewRowState.ModifiedCurrent;//原始数据的修改版本即当前版本
    //dv.Sort = "姓名 desc";//根据字段名1 逆序排列