0

我想在 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++;
}
4

5 回答 5

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();
}
于 2012-10-19T12:54:35.810 回答
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++;
}
于 2012-10-19T12:55:43.327 回答
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();
}
于 2012-10-19T12:58:13.620 回答
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.

于 2012-10-19T13:37:50.847 回答
0

你需要这样的东西:

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

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

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

于 2012-10-19T12:50:52.783 回答