我正在尝试查找一行,然后从datatable中删除该行。我一直得到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);
}
}发布于 2009-09-29 15:03:52
由于您创建了一个新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;
}
}发布于 2009-09-29 15:45:12
要在给定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删除行。
https://stackoverflow.com/questions/1493106
复制相似问题