Myślę, że powodem, dla którego kod OPs nie działa, jest to, że po wywołaniu Usuń zmieniasz Długość drr. Kiedy wywołasz Delete, nie usuniesz wiersza, dopóki nie zostanie wywołany AcceptChanges. Dlatego jeśli chcesz użyć Remove, potrzebujesz osobnej pętli.
zależności od sytuacji i preferencji ...
string colName = "colName";
string comparisonValue = (whatever it is).ToString();
string strFilter = (dtbl.Columns[colName].DataType == typeof(string)) ? "[" + colName + "]='" + comparisonValue + "'" : "[" + colName + "]=" + comparisonValue;
string strSort = "";
DataRow[] drows = dtbl.Select(strFilter, strSort, DataViewRowState.CurrentRows);
używane dla następnych dwóch przykładach
foreach(DataRow drow in drows)
{
drow.Delete();//Mark a row for deletion.
}
dtbl.AcceptChanges();
LUB
foreach(DataRow drow in drows)
{
dtbl.Rows[dtbl.Rows.IndexOf(drow)].Delete();//Mark a row for deletion.
}
dtbl.AcceptChanges();
LUB
List<DataRow> listRowsToDelete = new List<DataRow>();
foreach(DataRow drow in dtbl.Rows)
{
if(condition to delete)
{
listRowsToDelete.Add(drow);
}
}
foreach(DataRow drowToDelete in listRowsToDelete)
{
dtbl.Rows.Remove(drowToDelete);// Calling Remove is the same as calling Delete and then calling AcceptChanges
}
Zauważ, że jeśli wywołasz Delete(), powinieneś zadzwonić AcceptChanges(), ale jeśli wywołasz Remove(), to AcceptChanges() nie jest konieczne.
Also, here is a good link on row filter syntax.
jakieś komunikaty o błędach? – adt
brak błędów. próbowałem robić drukowanie liczby wierszy w tabeli. jest taki sam przed i po metodzie usuwania powyżej – Norman