Megosztás a következőn keresztül:


Sorállapotok és sorverziók

ADO.NET sorállapotok és -verziók használatával kezeli a táblák sorait. A sor állapota egy sor állapotát jelzi; A sorverziók a módosítás során megőrzik a sorban tárolt értékeket, beleértve az aktuális, az eredeti és az alapértelmezett értékeket is. Miután például módosította egy sor egyik oszlopát, a sor sorállapota Modifiedés két sorverziója lesz: Currentaz aktuális sorértékeket tartalmazó, valamint Originalaz oszlop módosítása előtti sorértékeket tartalmazó sor.

Minden DataRow objektum rendelkezik egy RowState tulajdonságmal, amelyet megvizsgálhat a sor aktuális állapotának meghatározásához. Az alábbi táblázat az egyes RowState enumerálási értékek rövid leírását tartalmazza.

RowState érték Leírás
Unchanged Nem történt módosítás a sor utolsó hívása AcceptChanges óta, illetve a sor létrehozása DataAdapter.Fillóta.
Added A sor hozzá lett adva a táblához, de AcceptChanges nem lett meghívva.
Modified A sor egyes elemei módosultak.
Deleted A sor törölve lett egy táblából, és AcceptChanges nem lett meghívva.
Detached A sor nem része egyiknek sem DataRowCollection. Az RowState újonnan létrehozott sor értéke a következő.Detached Miután az újat DataRow hozzáadta a DataRowCollection metódus meghívásával Add , a tulajdonság értéke a RowState következőre Addedvan állítva: .

Detached egy olyan sorra is be van állítva, amelyet eltávolítottak DataRowCollection a Remove metódus használatával, vagy a Delete metódus által követett metódussal AcceptChanges .

Amikor AcceptChanges a rendszer meghívja egy DataSet, DataTable vagy DataRow, az összes sorállapotú Deleted sort eltávolítja. A többi sor sorállapotú Unchangedlesz, a sorverzió értékei Original pedig felülírva lesznek a Current sorverzió értékeivel. Amikor RejectChanges a rendszer meghívja, a sorállapotú Added összes sor el lesz távolítva. A többi sor sorállapotú Unchangedlesz, a sorverzió értékei Current pedig felülírva lesznek a Original sorverzió értékeivel.

A sor különböző sorverzióit úgy tekintheti meg, hogy átad egy DataRowVersion paramétert az oszlophivatkozással, ahogy az az alábbi példában is látható.

Dim custRow As DataRow = custTable.Rows(0)  
Dim custID As String = custRow("CustomerID", DataRowVersion.Original).ToString()  
DataRow custRow = custTable.Rows[0];  
string custID = custRow["CustomerID", DataRowVersion.Original].ToString();  

Az alábbi táblázat az egyes DataRowVersion enumerálási értékek rövid leírását tartalmazza.

DataRowVersion érték Leírás
Current A sor aktuális értékei. Ez a sorverzió nem létezik a következővel rendelkező RowStateDeletedsorok esetében:
Default Egy adott sor alapértelmezett sorverziója. Egy , vagy egy sor alapértelmezett sorverziója Addeda következőCurrent.DeletedModified A sor alapértelmezett sorverziója Detached a következő Proposed.
Original A sor eredeti értékei. Ez a sorverzió nem létezik a következővel rendelkező RowStateAddedsorok esetében:
Proposed A sor javasolt értékei. Ez a sorverzió egy sor szerkesztési művelete során, vagy olyan sor esetében létezik, amely nem része a DataRowCollectionsornak.

A metódus meghívásával HasVersion és argumentumként való átadásával DataRowVersion tesztelheti, hogy egy DataRow adott sorverzióval rendelkezik-e. Például az újonnan hozzáadott sorok vissza fognak térnifalse, DataRow.HasVersion(DataRowVersion.Original) mielőtt AcceptChanges meghívták volna őket.

Az alábbi példakód egy tábla összes törölt sorában megjeleníti az értékeket. Deleted a sorok nem rendelkeznek sorverzióval Current , ezért az oszlopértékek elérésekor meg kell felelnie DataRowVersion.Original .

Dim catTable As DataTable = catDS.Tables("Categories")  
  
Dim delRows() As DataRow = catTable.Select(Nothing, Nothing, DataViewRowState.Deleted)  
  
Console.WriteLine("Deleted rows:" & vbCrLf)  
  
Dim catCol As DataColumn  
Dim delRow As DataRow  
  
For Each catCol In catTable.Columns  
  Console.Write(catCol.ColumnName & vbTab)  
Next  
Console.WriteLine()  
  
For Each delRow In delRows  
  For Each catCol In catTable.Columns  
    Console.Write(delRow(catCol, DataRowVersion.Original) & vbTab)  
  Next  
  Console.WriteLine()  
Next  
DataTable catTable = catDS.Tables["Categories"];  
  
DataRow[] delRows = catTable.Select(null, null, DataViewRowState.Deleted);  
  
Console.WriteLine("Deleted rows:\n");  
  
foreach (DataColumn catCol in catTable.Columns)  
  Console.Write(catCol.ColumnName + "\t");  
Console.WriteLine();  
  
foreach (DataRow delRow in delRows)  
{  
  foreach (DataColumn catCol in catTable.Columns)  
    Console.Write(delRow[catCol, DataRowVersion.Original] + "\t");  
  Console.WriteLine();  
}  

Lásd még