请问在不更改DataSource的情况下,如果使DataGrid只显示满足一定条件的行?
我试过下面这样做无反应
((DataSet)dataGrid1.DataSource).Table[dataGrid1.DataMember].DefaultView.RowFilter = "id=4";

解决方案 »

  1.   

    DataView dv = dt.DefaultView;
    dv.RowFilter = "id=4";
    dataGrid1.DataSource = dv;
      

  2.   

    DataView dv = ((DataSet)dataGrid1.DataSource).Tables[dataGrid1.DataMember].DefaultView;
    dv.RowFilter =  "id=4"; //文本时 "id='4'"
    dataGrid1.DataSource = dv;
      

  3.   

    我上面已经写的很清楚,DataSource在设计时已经设置好,运行时不能修改。
      

  4.   

    你重dataset中选取合适的值,在填入别的dataset,再绑定这个dataset不久行了吗?
      

  5.   

    为什么不能修改呢?想不明白。
    如果你真的不想修改的话,按条件历遍DataGrid的Row和Cell
      

  6.   

    在邦定的时候,
    for( int i = 0; i < ((DataSet)dataGrid1.DataSource).Table[0].Rows.Count; i++ ) 
    {
    if( ((DataSet)dataGrid1.DataSource).Tables[0].Rows[i]["id"].ToString().Trim() != "4" )
    {
    ((DataSet)dataGrid1.DataSource)..Tables[0].Rows[i].Delete();
    }
    }然后你什么后还想要使用原来的DataTable.就用
    ((DataSet)dataGrid1.DataSource).Tables[0].RejectChanges();可以了。
      

  7.   

    DataSet m_dsResult = new DataSet("PersonMessage");
    DataTable m_objDataTable = m_dsResult.Tables.Add("PersonMessage");
    DataRow objDataRow = m_objDataTable.NewRow();
    if (id == 4)
    {
        m_objDataTable.Rows.Add(objDataRow);
    }
    DataGrid.SetDataBinding(m_dsResult, "PersonMessage");
      

  8.   

    原来DataGrid这么麻烦,我的本意是WinForm有一个DataSet,DataSet中包含几个表,DataGrid显示其中一个表中几个栏的内容,WinForm中还有其他TextBox显示同一个表的同一个记录的其他栏的内容,如果运行时改变DataSource的话,则DataGrid的内容与TextBox就不会同步了。
    为什么改变DataGrid.DataSource中的表的DefaultDataView的RowFilter没有用?怎样才能引用DataGrid绑定的数据表的DefaultDataView?
      

  9.   

    暂时找到解决的办法
    在WinForm中放一个DataView,把DataGrid的DataSource指向这个DataView,然后在DataGrid的CurrentCellChanged中处理其他TextBox的同步显示问题。