Rows.IndexOf DataTable ()
-
18-09-2019 - |
Pregunta
Estoy tratando de encontrar una fila y luego eliminar esa fila de una tabla de datos. Sigo recibiendo nIndex = -1. Alguien tiene sugerencias?
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);
}
}
Solución
Desde que se crea un nuevo DataRow
dr = dt.NewRow();
que no lo encontrará en el DataTable.
Se desea eliminar la fila que se encuentra en el DataTable:
int nIndex = dt.Rows.IndexOf(row);
no
int nIndex = dt.Rows.IndexOf(dr);
Editar O tal vez no. Es probable que tenga que recorrer todo el DataTable y comparar el valor de la columna:
for (var i = dt.Rows.Count; i >= 0; i--)
if (dt.Rows[i].Cells[1].Text == sSampleId) {
dt.Rows.Remove(i);
break;
}
}
Otros consejos
Para encontrar y eliminar una fila en un ADO.NET DataTable
dada su ID:
DataRow[] found = dt.Select("sample_id = " + sample_id);
if (found.Length < 0)
{
found[0].Delete();
}
Tenga en cuenta que hay una diferencia entre Delete
y Remove
. Delete
cambia de estado de la fila a RowState.Deleted
, lo que hace desaparecer de la DataTable
para la mayoría de los propósitos. Sin embargo, todavía existe. Esto es importante si usted está utilizando un adaptador de datos para sincronizar la DataTable
con una tabla de base de datos subyacente:. El adaptador se elimine la fila subyacente cuando se llama a su método Update
y sólo entonces se quita la fila de la colección Rows
Si usted no está usando un adaptador de datos, que está bien usar Remove
para eliminar una fila.