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

これがあなたのコードを変更したので、私はそれがどのように書かれているかが好きではありませんが、それは機能します。答えを確認してください:

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 に答える
1

質問の 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 に答える
0

次のようなものが必要です。

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

質問の2番目の部分については、空かどうかCommentsnull確認してから、文字列も置き換えてください。

独自の要件に従ってコードを配置します。

于 2012-10-19T12:50:52.783 に答える