我使用
DataRow[] r = ds.Tables[0].Select("name ='"+textBox1.Text+"' ");
取得了一个记录数组。我想把这个记录数组放入dataGridView中。
经测试,dataGridView不能直接绑定记录数组。虽然可以使用循环语句将记录数组
dt.Rows.Add(DataRow[i])
赋值给表对象。
但是我想这样对系统开销有些大。不知道大家有没有好的方法来解决这个问题?
或者如何来高效的实现查询功能?

解决方案 »

  1.   

    tryds.Tables[0].DefaultView.RowFilter = "name ='"+textBox1.Text+"'";
    DataTable dt = ds.Tables[0].DefaultView.ToTable();
    dataGridView1.DataSource = dt;
      

  2.   

    dt.Rows.Add(DataRow[i])
    传的是引用,占用资源不会很多。
      

  3.   

    我找到一个更好的查询数据方法,与大家共享一下
    DataSet ds = opconn();
                DataView dv = new DataView(ds.Tables[0]);//创建数据视图
                if (textBox1.Text != "")
                {
                    dv.RowFilter = "name ='" + textBox1.Text + "'";//数据视图筛选数据
                    dataGridView1.AutoGenerateColumns = true;//网格控件是否自动创建           
                    dataGridView1.DataSource = dv;//绑定网格控件的数据源,这里使用DataRow r记录数组作为数据源            }
                else
                {
                    dv.Sort = "ge desc";//数据视图排序,可有多个列,默认为升序,降序加desc
                    dataGridView1.AutoGenerateColumns = true;//网格控件是否自动创建
                    dataGridView1.DataSource = dv;//绑定网格控件的数据源,这里使用dataset作为数据源
                
                }
      

  4.   

    好像gridview可以绑定List数据的,lz可以试试
      

  5.   

    DataGridView 类支持标准的 Windows 窗体数据绑定模型。这意味着数据源可以是实现下列接口之一的任何类型:IList 接口,包括一维数组。IListSource 接口,例如,DataTable 和 DataSet 类。IBindingList 接口,例如,BindingList 类。IBindingListView 接口,例如,BindingSource 类。===================这是 msdn 上的,明确写着支持一维数组。
      

  6.   

    我是菜鸟,想问一下great_king(),DataSet ds = opconn();这句是什么意思
      

  7.   

    呵呵,opconn()那个是我写的一个方法。方法的实现没有在帖子里面贴出来:)
    就是返回一个数据集。
     private DataSet opconn()
            { 
                string strConn = "Initial Catalog=Northwind;Data Source=(local);User ID=sa;Password=kingat801";
                SqlConnection conn = new SqlConnection(strConn);
                conn.Open();
                SqlCommand selcmd = new SqlCommand();
                selcmd.Connection = conn;
                selcmd.CommandText ="SELECT * FROM test";            SqlDataAdapter da = new SqlDataAdapter();
                da.SelectCommand = selcmd;            DataSet ds = new DataSet();
                da.Fill(ds, "king");
                conn.Close();
                return ds;
            }
      

  8.   

    楼主很不厚道哦,楼主的方法明明是lxcnn兄给出的解决方案,楼主却最终“无满意答案结贴”Orz...
      

  9.   

    其实lxcnn的解决方案可以简化为这样:ds.Tables[0].DefaultView.RowFilter=string.Format("name='{0}'",textBox1.Text); 
    dataGridView1.DataSource=ds.Tables[0].DefaultView;哎,c#的设计实在让程序员太舒服了。
      

  10.   

    呵呵,楼上说的也不全对
    我是用DataView来接受数据,而lxcnn使用dataset。
    不过lxcnn的方法也是正确的。
      

  11.   

    采用以下办法:
    DataRow[] drArr = dt.Select("C1=’abc’");//查询问题来了,如果要把DataRow赋值给新的DataTable,怎么赋值呢?你可能会想到: DataTable dtNew = dt.Clone(); 
    for (int i = 0; i < drArr.Length; i++) 

        dtNew.Rows.Add(drArr[i]); 
    }
    但这样程序就会出错,说该DataRow是属于其他DataTable的,那要怎么做呢?很简单,这样就可以解决了: DataTable dtNew = dt.Clone();  
    for (int i = 0; i < drArr.Length; i++)  
    {  
        dtNew.ImportRow(drArr[i]);  } 这样就完成了。