首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataTable Rows.IndexOf()

DataTable Rows.IndexOf()
EN

Stack Overflow用户
提问于 2009-09-29 14:59:13
回答 2查看 17.4K关注 0票数 0

我正在尝试查找一行,然后从datatable中删除该行。我一直得到nIndex = -1。有谁有建议吗?

代码语言:javascript
复制
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);
 }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-09-29 15:03:52

由于您创建了一个新DataRow

代码语言:javascript
复制
dr = dt.NewRow();

您不会在DataTable中找到它。

您希望删除DataTable中的行:

代码语言:javascript
复制
int nIndex = dt.Rows.IndexOf(row);

代码语言:javascript
复制
int nIndex = dt.Rows.IndexOf(dr);

编辑:或者不是。您可能需要遍历整个DataTable并比较列中的值:

代码语言:javascript
复制
for (var i = dt.Rows.Count; i >= 0; i--)
  if (dt.Rows[i].Cells[1].Text == sSampleId) {
    dt.Rows.Remove(i);
    break;
  }
}
票数 0
EN

Stack Overflow用户

发布于 2009-09-29 15:45:12

要在给定ID的ADO.NET DataTable中查找和删除行,请执行以下操作:

代码语言:javascript
复制
DataRow[] found = dt.Select("sample_id = " + sample_id);
if (found.Length < 0)
{
   found[0].Delete();
}

请注意,DeleteRemove之间存在差异。Delete将行的状态更改为RowState.Deleted,这将使该行在大多数情况下从DataTable中消失。但它仍然存在。如果使用数据适配器将DataTable与基础数据库表同步,这一点很重要:当您调用其Update方法时,适配器将删除基础行,然后才会从Rows集合中删除该行。

如果您没有使用数据适配器,则可以使用Remove删除行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1493106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档