是否可以删除数据表单元格的第一个元素,即字符串值?

Is it possible to remove the first element of a datatable cell, which is a string value?

我有一个 datatable 填充字符串。

我想删除其中一列的前 2 个元素。

""Edit: By element i mean the first 2 characters of the string of a datacell. End of Edit""

这样的事情在字符串中很容易,使用 remove 命令。但是在数据单元中是否可能相同?

PS:有些人可能会回答 "Why not define the string first, and then place it on the cell",但我宁愿避免它,因为我的单元格是由一系列串联定义的。这是我的做法。

//create a list of the columns name
  List<string> listadecolunas = new List<string>();
                foreach (DataColumn coluna in DataAccess.Instance.tabelafinal5.Columns)
                {
                    listadecolunas.Add(coluna.ColumnName);

                }

 //create a concatenated string that encolsures all the following columns

 for (int i = 0; i < DataAccess.Instance.tabelafinal5.Rows.Count; i++)
                {
                    for (int y = 2; y < listadecolunas.Count; y++)
                    {
                        string elemento0 = DataAccess.Instance.tabelafinal5.Rows[i][y].ToString();

                        if (elemento0 != "")
                        {

                                DataAccess.Instance.tabelafinal5.Rows[i]["Expressão"] = DataAccess.Instance.tabelafinal5.Rows[i]["Expressão"] + " + " + elemento0;
                        }
                    }

                } 

我不想用细节来填充它,但由于我已经发布了代码,最后我会得到一个以 + 开头的数据单元,我想删除它,它只是那。

编辑2: 我的手机看起来像这样

我想删除第一个 + :)

你可以用这样的小帮手来做这件事:

for (int i = 0; i < DataAccess.Instance.tabelafinal5.Rows.Count; i++)
{
    bool isFirst = true;
    for (int y = 2; y < listadecolunas.Count; y++)
    {
        string elemento0 = DataAccess.Instance.tabelafinal5.Rows[i][y].ToString();

        if (elemento0 != "")
        {
            if(isFirst)
            {
                isFirst = false;
                DataAccess.Instance.tabelafinal5.Rows[i]["Expressão"] = DataAccess.Instance.tabelafinal5.Rows[i]["Expressão"] + elemento0;
            }
            else
            {
                DataAccess.Instance.tabelafinal5.Rows[i]["Expressão"] = DataAccess.Instance.tabelafinal5.Rows[i]["Expressão"] + " + " + elemento0;
            }
        }
    }
} 

使用 StringBuilder 效率更高一点,但概念相同:

StringBuilder sb = new StringBuilder();
for (int i = 0; i < DataAccess.Instance.tabelafinal5.Rows.Count; i++)
{
    bool isFirst = true;
    sb.Clear();
    for (int y = 2; y < listadecolunas.Count; y++)
    {
        string elemento0 = DataAccess.Instance.tabelafinal5.Rows[i][y].ToString();

        if (elemento0 != "")
        {
            if(isFirst)
            {
                isFirst = false;
            }
            else
            {
                sb.Append(" + ")
            }
            sb.Append(elemento0);
        }
    }
    if(sb.Length > 0)
    {
    DataAccess.Instance.tabelafinal5.Rows[i]["Expressão"] = DataAccess.Instance.tabelafinal5.Rows[i]["Expressão"] + sb.ToString();
    }
} 

现在,如果您甚至跨不同的方法构建 Cell,并且您不知道之前发生了什么,您将根据单元格的当前值是否为空来设置 isFirst,而不是赋值true 默认为它。