DataTable Rows.IndexOf ()
-
18-09-2019 - |
Domanda
Sto cercando di trovare una riga e quindi eliminare la riga da un DataTable. Continuo a ricevere nIndex = -1. Qualcuno ha suggerimenti?
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);
}
}
Soluzione
Dal momento che si crea una nuova DataRow
dr = dt.NewRow();
che non troverete nel DataTable.
Si desidera rimuovere la riga che è nel DataTable:
int nIndex = dt.Rows.IndexOf(row);
non
int nIndex = dt.Rows.IndexOf(dr);
Modifica O forse no. Probabilmente dovrete per scorrere l'intero DataTable e confrontare il valore nella colonna:
for (var i = dt.Rows.Count; i >= 0; i--)
if (dt.Rows[i].Cells[1].Text == sSampleId) {
dt.Rows.Remove(i);
break;
}
}
Altri suggerimenti
Per trovare ed eliminare una riga in un ADO.NET DataTable
dato il suo ID:
DataRow[] found = dt.Select("sample_id = " + sample_id);
if (found.Length < 0)
{
found[0].Delete();
}
Si noti che c'è una differenza tra Delete
e Remove
. Delete
cambia lo stato della riga RowState.Deleted
, che fa scomparire dal DataTable
per molti scopi. Ma esiste ancora. Questo è importante se si sta utilizzando un adattatore di dati per sincronizzare il DataTable
con una tabella di database sottostante:. L'adattatore eliminare la riga di fondo quando si chiama il suo metodo Update
e solo allora rimuovere la riga dalla collezione Rows
Se non si utilizza un adattatore di dati, è OK per utilizzare Remove
per rimuovere una riga.