删除并删除行匹配字符串?

时间:2012-10-19 12:34:45

标签: c# datatable delete-row

我想在DataTable中搜索一个字符串,如果它以"null"开头删除此字符串,如果此行没有值,则删除此行。有人可以告诉我该怎么做吗?

ID    Name   Comment
2     lola    hallo
5     miky    hi
      null0          // delete null0 and remove this row     
      null1   ko     // delete null1 but do not remove this row
1      hub    why
3     null2          //delete null2 but do not remove this row

我尝试删除"null",但它不起作用。

我的代码:

int ct1 = 0;
for (int i = 0; i < resE1.Rows.Count; i++ )
{
    if(resE1.Rows[i]["SignalName"].ToString() == "null" + ct1)
    {
        resE1.Rows[i].SetField<String>(2, "");
    }
    ct1++;
}

我找到了用空格替换"null*"的解决方案,但是现在我想删除此行,如果此行的单元格值为空,我该怎么办?

int ct1 = 0;
for (int i = 0; i < resE1.Rows.Count; i++)
{
    string fix = resE1.Rows[i]["SignalName"].ToString();

    if(fix.Contains("null"))
    {
        resE1.Rows[i].SetField<String>(2, "");
    }
    ct1++;
}

5 个答案:

答案 0 :(得分:1)

要回答您的一个问题,要删除整行,请执行以下操作:

if(resE1.Rows[i].Contains("null") && (resE1.Rows[i]["ID"].ToString() == "") && (resE1.Rows[i]["Comment"].ToString() == ""))
{
    resE1.Rows[i].Delete();
}

bool emptyFlag = false;
if(resE1.Rows[i].Contains("null"))
{
    for(int j = 0; j < resE1.Columns.Count; j++)
    {
       if(resE1.Rows[i][j].Equals(""))
        emptyFlag = true;
       else
        emptyFlag = false;
    }
   if(emptyFlag)
    resE1.Rows[i].Delete();
}

答案 1 :(得分:1)

以下是您的代码已更改,因此虽然我不喜欢它的编写方式,但它仍然有效。检查答案:

int ct1 = 0;
int i = 0;
while(i < dt.Rows.Count)
{
    if ( dt.Rows[i]["Name"].ToString() == "null" + ct1)
    {
        if ((dt.Rows[i][0] == null || dt.Rows[i][0].ToString() == string.Empty) && (dt.Rows[i][2] == null || dt.Rows[i][2].ToString() == string.Empty))
        {
            dt.Rows.RemoveAt(i);
            i--;
        }
        else
        {
            dt.Rows[i].SetField<String>(1, "");
        }
        ct1++;
    }
    i++;
}

答案 2 :(得分:1)

我试过这个。适合我。

List<DataRow> rowsToRemove = new List<DataRow>();
foreach (DataRow dr in resE1.Rows)
{
    if (dr["Name"].ToString().IndexOf("null") == 0)
    {
        dr.SetField("Name", "");
    }
    bool hasValue = false;
    for (int i = 0; i < dr.ItemArray.Count(); i++)
    {
        if (!dr[i].ToString().Equals(String.Empty))
           hasValue = true;
    }
    if (!hasValue) rowsToRemove.Add(dr);
}
foreach(DataRow dr in rowsToRemove)
{
    dr.Delete();
}

答案 3 :(得分:1)

假设您的DataTable"Name"string,您可以这样做:

private DataTable RemoveUnwanted(DataTable source)
{
    var rowsEnu = source.Rows.GetEnumerator();
    while (rowsEnu.MoveNext())
    {
        ((DataRow)rowsEnu.Current)["Name"] = ((DataRow)rowsEnu.Current)["Name"].ToString().StartsWith("null") ? string.Empty : ((DataRow)rowsEnu.Current)["Name"];
    }

    return (from i in source.AsEnumerable()
            where !(i.ItemArray.All(o => string.IsNullOrEmpty(o.ToString())))
            select i).CopyToDataTable();
}

您还需要参考System.Data.DataSetExtensions

答案 4 :(得分:0)

你需要这样的东西:

String test = "Null01";
if (test.IndexOf("Null") == 0)
{
    test = test.Replace("Null", String.Empty);
}

对于问题的第二部分,只需检查Commentsnull还是空,然后替换字符串。

根据您自己的要求安排代码。