Я хочу видалити кілька записів з DataTable Наприклад : у моєму випадку 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();
}
}
Відповіді:
1 для відповіді № 1Використовуючи 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 для відповіді № 2
Спробуйте це
DataRow[] rows;
rows=dataTable.Select("UserName = "ABC""); // UserName is Column Name
foreach(DataRow r in rows)
r.Delete();
0 для відповіді № 3
Якщо ви хочете видалити весь рядок від Дані таблиці ,
спробуйте це
DataTable dt = new DataTable(); //User DataTable
DataRow[] rows;
rows = dt.Select("UserName = "KarthiK"");
foreach (DataRow row in rows)
dt.Rows.Remove(row);