DataTableのRows.IndexOf()
-
18-09-2019 - |
質問
私は、行を検索し、データテーブルからその行を削除しようとしています。私は、nIndex = -1得続けます。誰もが持っているの提案ですか?
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);
}
}
解決
あなたは新しいのDataRowを作成しているので、
dr = dt.NewRow();
あなたはDataTableのそれを見つけることができません。
あなたはのDataTableにある行を削除する:
int nIndex = dt.Rows.IndexOf(row);
ない
int nIndex = dt.Rows.IndexOf(dr);
の編集を またはそうでないかもしれません。あなたは、おそらく全体のDataTableをループしており、列の値を比較します。
for (var i = dt.Rows.Count; i >= 0; i--)
if (dt.Rows[i].Cells[1].Text == sSampleId) {
dt.Rows.Remove(i);
break;
}
}
他のヒント
検索し、そのIDを所与ADO.NETのDataTable
の行を削除するには:
DataRow[] found = dt.Select("sample_id = " + sample_id);
if (found.Length < 0)
{
found[0].Delete();
}
Delete
とRemove
違いがあることに注意してください。 Delete
は、それはほとんどの目的のためにRowState.Deleted
から消えますDataTable
への行の状態を変化させます。しかし、それはまだ存在しています。あなたは基礎となるデータベースのテーブルでDataTable
を同期するために、データアダプタを使用している場合、これは重要です:あなたはそのUpdate
メソッドを呼び出すだけにしてRows
コレクションから行を削除すると、アダプターは、下の行を削除します。
、それが行を削除するためにRemove
を使用してOKです。
所属していません StackOverflow