У вас есть несколько вариантов здесь:
1. Добавьте первичный ключ
вы можете добавить primary key to your data table при его создании.
Предполагая, что вы имели столбец «Id», то вы могли бы сделать это следующим образом:
AllItems.PrimaryKey = new DataColumn[] { workTable.Columns["Id"] };}
Или, за исключением случаев, когда ваш первичный ключ является составным ключом (несколько столбцов):
AllItems.PrimaryKey = new DataColumn[] {
workTable.Columns["Id"],
workTable.Columns["Name"] };}
Это позволило бы Содержанию работать правильно.
2. Использование DataView
Вы можете использовать DataView, чтобы отфильтровать определенные строки;
DataView view = new DataView(AllItems);
DataTable distinctValues = view.ToTable(true, "Column1", "Column2" , ..., "ColumnN");
3. Найдите соответствующие строки с помощью Select
Или вы можете полагаться на метод Select, чтобы проверить, если соответствующая строка существует в Items
DataTable на основе заявления, что это как SQL WhereClause:
List<DataRow> rowsToRemove = new List<DataRow>();
foreach(DataRow allItemRow in AllItems.Rows)
{
if(Items.Select(String.Format("Id = {0}"),
allItemRow.Field<Int32>("Id")).Length == 0)
{
rowsToRemove.Add(allItemRow);
}
}
rowsToRemove.ForEach(x => x.Delete());
AllItems.AcceptChanges();
Примечания, что это важно не удалять строки в то время как вы перебор коллекции Rows в AllItems - вместо этого собирайте эти строки и удалите их потом.
4. Фильтр по пути в
Кроме того, обратите внимание, и я не пробовал, но, в зависимости от того, как вы выбираете строки из Excel, вы можете быть в состоянии использовать SQL Предложение DISTINCT; если вы используете ODBC to load data from Excel, тогда вы можете попробовать фильтровать в источнике.
Это [лучший] (http://msdn.microsoft.com/en-us/library/vstudio/ff926074.aspx), чтобы использовать верблюд-первый верблюд-футляр для 'variableNames'. –
Голосовать за закрытие (замечено после добавления ответа): http://stackoverflow.com/questions/4415519/best-way-to-remove-duplicate-entries-from-a-data-table - в частности, http://stackoverflow.com/a/15264638/1073107 дает очень сукцинный ответ для удаления повторяющихся строк. – dash