2013-05-25 105 views
1

我想从数据表中删除多个记录 例如: 在我的案例中PaperId是重复几个时间。我想删除所有重复的记录。从数据表中删除行

我已经写代码,但环给错误

 DataSet ds = new DataSet(); 
     sqlDad.Fill(ds); 
     DataTable dt1 = new DataTable(); 
     ds.Tables.Add(dt1); 
     dt1 = ds.Tables[0]; 
     DataTable dt2 = new DataTable(); 
     dt2 = dt1; 
     List<DataRow> rowsToDelete = new List<DataRow>(); 

     foreach(DataRow dr in ds.Tables[0].Rows) 
     { 
      int r = ds.Tables[0].Columns.Count; 
      string x = dr.ItemArray[0].ToString(); 
      int counter = 0; 
      foreach (DataRow dr1 in ds.Tables[0].Rows) 
      { 

       if (x == dr1.ItemArray[0].ToString()) 
       { 
        counter++; 
       } 
       if (counter > 1) 
       { 
        rowsToDelete.Add(dr1); 
        foreach (DataRow row in rowsToDelete) 
        { 
         dt2.Rows.Remove(row); 
        } 
        dt2.AcceptChanges(); 
        rowsToDelete.Clear(); 
       } 

      } 
+0

什么我错误? –

+0

问题是这样的:它们是表中的多个值,可以通过查看PaperId来识别。我想删除该特定PaperId左侧的重复记录只有一条记录 – Himanshu

回答

1

使用DataTable的DefaultView和设置上,你不想重复出现在列的排序顺序。你可以在行中循环,第一个

// Work on the first table of the DataSet 
DataTable dt1 = ds.Tables[0]; 
// No need to work if we have only 0 or 1 rows 
if(dt1.Rows.Count <= 1) 
    return; 

// Setting the sort order on the desidered column 
dt1.DefaultView.Sort = dt1.Columns[0].ColumnName; 

// Set an initial value (I choose an empty string but you could set to something not possible here 
string x = string.Empty;  

// Loop over the row in sorted order 
foreach(DataRowView dr in dt1.DefaultView) 
{ 
    // If we have a new value, keep it else delete the row 
    if(x != dr[0].ToString()) 
     x = dr[0].ToString(); 
    else 
     dr.Row.Delete(); 

} 
// Finale step, remove the deleted rows 
dt1.AcceptChanges(); 
1

后删除所有的行试试这个

DataRow[] rows; 
rows=dataTable.Select("UserName = 'ABC'"); // UserName is Column Name 
foreach(DataRow r in rows) 
r.Delete(); 
0

如果你想从数据表删除整个行

试试这个

DataTable dt = new DataTable(); //User DataTable 
DataRow[] rows; 
rows = dt.Select("UserName = 'KarthiK'"); 
foreach (DataRow row in rows) 
    dt.Rows.Remove(row);