DataTable Zeilen.IndexOf()
Ich versuche eine Zeile zu finden und dann löschen, Zeile aus einer Datentabelle. Ich erhalte nIndex = -1. Jemand Vorschläge?
protected void cbxSelected_CheckedChanged(object sender, EventArgs e)
{
CheckBox checkbox = (CheckBox)sender;
GridViewRow row = (GridViewRow)checkbox.NamingContainer;
string sSampleId = row.Cells[1].Text;
if (!string.IsNullOrEmpty(sSampleId))
{
DataTable dt;
if (ViewState["dtTemp"] != null)
{
dt = (DataTable)ViewState["dtTemp"];
}
else
{
dt = new DataTable();
dt.Columns.Add("sample_id");
}
DataRow dr;
string[] drow = new string[] { sSampleId };
dr = dt.NewRow();
dr.ItemArray = drow;
if (checkbox.Checked == true)
{
dt.Rows.Add(dr);
}
else if (checkbox.Checked == false)
{
int nIndex = dt.Rows.IndexOf(dr);
dt.Rows.RemoveAt(nIndex);
}
ViewState.Add("dtTemp", dt);
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da Sie erstellen eine neue DataRow
werden Sie nicht finden es in der DataTable.
Sie möchten, entfernen Sie die Zeile in der DataTable:
nicht
Edit:
Oder vielleicht auch nicht. Sie werden wahrscheinlich haben, um eine Schleife durch den gesamten DataTable und vergleichen Sie den Wert in der Spalte:
Finden und löschen einer Zeile in einem ADO.NET
DataTable
angesichts Ihrer ID:Beachten Sie, dass es einen Unterschied zwischen
Delete
undRemove
.Delete
änderungen der Zeile StaatRowState.Deleted
, das es verschwinden aus derDataTable
für die meisten Zwecke. Es existiert aber noch. Dies ist wichtig, wenn Sie eine Daten-adapter zum synchronisieren derDataTable
mit einer zugrunde liegenden Datenbank-Tabelle: der adapter wird löschen Sie die darunter liegende Zeile, wenn Sie anrufen, seineUpdate
Methode, und entfernen Sie erst dann die Zeile aus derRows
Sammlung.Wenn Sie nicht über eine Daten-adapter, es ist OK zu verwenden
Remove
um eine Zeile zu entfernen.