先从DataTable中通过过滤生成一个DataView,然后将过滤出来的DataView再生成一个新的DataTable,再将新的DataTable中的数据增加到数据库中的呀

解决方案 »

  1.   

    DataTable dt1 = new DataTable();
                //......
                DataView dv1 = dt1.DefaultView;
                dv1.RowFilter = "过滤字符串";
                dv1.Table.AcceptChanges();            DataTable dt2 = dv1.Table.Copy();
                foreach(DataRow dr in dt2.Rows)
                {
                    //逐条数据插入数据库
                }            //如果你是用dataAdapter.Update方法去写数据库,那么就要像下面这样写
                dt2 = dv1.Table.Clone();
                
                foreach(DataRow dr in dv1.Table.Rows)
                {
                    dt2.Rows.Add(dr.ItemArray);
                }
      

  2.   

    楼上的dt1在我的程式里是_dtFillTable,它已保存着从数据库中取出来的数据,可我按照上面的做法,结果dt2里的数据和原_dtFillTable保存数据是一样的,请那位大虾再帮忙解决,谢谢!
      

  3.   

    那么就是  dv1.RowFilter = "过滤字符串"; 没有起作用了?这个偶也猜不到是什么原因,最好把代码贴一下
      

  4.   

    DataRow[] dr = d1.Select("过滤字符串");
    for(int i = 0 ;i<dr.Length;i++)
    {
        //update db
    }
      

  5.   

    private void SetTableByDataFilter()
    {
    DataView ViewRecords =  new DataView( _dtFillTable); bool flag = false; try
    {
    // Build the RowFilter statement according to the user restriction 
    foreach (DataRow FilterRow in TableFilterData.Rows)
    {
    if (FilterRow["Operation"].ToString() != string.Empty && FilterRow["ColumnData"].ToString() != string.Empty)
    {
    // Add the "AND" operator only from the second filter condition 
    // The RowFilter get statement which simallar to the Where condition in sql query
    // For example "GroupID = '6' AND GroupName LIKE 'A%' 
    if (ViewRecords.RowFilter == string.Empty)
    {
    ViewRecords.RowFilter = FilterRow["ColumnName"].ToString() + " " + FilterRow["Operation"].ToString() + " '" + FilterRow["ColumnData"].ToString()+"'"; }
    else
    {
    ViewRecords.RowFilter += " AND " + FilterRow["ColumnName"].ToString()+" " + FilterRow["Operation"].ToString() +" '"+ FilterRow["ColumnData"].ToString()+"'"; } flag = true;
    }
    }
    if (flag)
    {
    ViewRecords.Table.AcceptChanges(); DataTable dtTemp = ViewRecords.Table.Copy();
    dataGrid1.DataSource = dtTemp;
    }
    else
    {
    iCurrentPage = 0; fnDownCyc();
    }
    }
    catch (System.Exception ex)
    {
    MessageBox.Show(ex.Message);
    }
    }
      

  6.   

    private void SetTableByDataFilter()
    {
         DataView ViewRecords =  new DataView( _dtFillTable);     bool flag = false;     try
        { foreach (DataRow FilterRow in TableFilterData.Rows)
    {
       if (FilterRow["Operation"].ToString() != string.Empty && FilterRow["ColumnData"].ToString() != string.Empty)
       {
    // Add the "AND" operator only from the second filter condition 
    // The RowFilter get statement which simallar to the Where condition in sql query
    // For example "GroupID = '6' AND GroupName LIKE 'A%' 
    if (ViewRecords.RowFilter == string.Empty)
    {
        ViewRecords.RowFilter = FilterRow["ColumnName"].ToString() + " " + FilterRow["Operation"].ToString() + " '" + FilterRow["ColumnData"].ToString()+"'"; }
    else
    {
        ViewRecords.RowFilter += " AND " + FilterRow["ColumnName"].ToString()+" " + FilterRow["Operation"].ToString() +" '"+ FilterRow["ColumnData"].ToString()+"'"; }          flag = true;
       }
    }
    if (flag)
    {
        ViewRecords.Table.AcceptChanges();     DataTable dtTemp = ViewRecords.Table.Copy();
        dataGrid1.DataSource = dtTemp;
    }
    else
    {
        iCurrentPage = 0;     fnDownCyc();
    }
        }
        catch (System.Exception ex)
       {
    MessageBox.Show(ex.Message);
        }
    }
      

  7.   

    从代码看已经看不出有什么问题了,实在再帮不上什么,lz只能自己跟踪调试一下RowFilter里面的内容了.... sorry~~
      

  8.   

    你可以把DataView当前的数据抽出来,如下:
    DataRow[] drArray = yourDataView.Table.Select( yourDataView.RowFilter,
            yourDataView.Sort,
            yourDataView.RowStateFilter );
    foreach( DataRow dr in drArray )
    {
        //Update data base using "dr"
    }