将字符串添加到列表框时数据丢失

时间:2012-10-30 16:49:55

标签: c#

我循环浏览二维数组的内容,其中包含基因杂交的Punnett Square计算结果。我需要总结结果,以便用户可以很容易地看到唯一的实例。我可以通过将结果放入文本框来实现这一点,但是当我尝试使用ListBox来显示数据时,部分信息就会丢失,即将AaBBCc类型数据转换为与特征直接相关的内容用户最初选择的。

这是操作的主要代码块:

    foreach (string strCombination in arrUniqueCombinations)
    {
        int intUniqueCount = 0;
        decimal decPercentage;
        foreach (string strCrossResult in arrPunnettSQ)
        {
            if (strCrossResult == strCombination)
            {
                intUniqueCount++;
            }
        }
        decPercentage = Convert.ToDecimal((intUniqueCount*100)) / Convert.ToDecimal(intPossibleCombinations);
        txtReport.AppendText(strCombination + " appears " + intUniqueCount.ToString() + " times or " + decPercentage.ToString() + "%."+ Environment.NewLine);

        lstCrossResult.Items.Add(DecodeGenome(strCombination) + " appears " + intUniqueCount.ToString() + " times or " + decPercentage.ToString() + "%.");
    }

为了将数据附加到文本框,我使用此代码并且它完美地运行:

txtReport.AppendText(DecodeGenome(strCombination) + " appears " + intUniqueCount.ToString() + " times or " + decPercentage.ToString() + "%."+ Environment.NewLine);

给出结果: 特质1 Het。,特质3出现16次或25%。

要将结果添加到列表框,这可以:

lstCrossResult.Items.Add(strCombination + " appears " + intUniqueCount.ToString() + " times or " + decPercentage.ToString() + "%.");

给出结果: AaBBCc出现16次或25%。

但strCombination的内容是AaBBCc,我需要把它翻译成“Trait 1 Het。,Trait 3”,我用这段代码完成了这个:

private string DecodeGenome(string strGenome)
{
    string strTranslation = "";
    int intLength = strGenome.Length;
    int intCounter = intLength / 2;
    string[] arrPairs = new string[intLength / 2];


    //Break out trait pairs and load into array

    for (int i = 1; i <= intLength; i++)
    {
        arrPairs[i / 2] = strGenome.Substring((i-1),2);
        i++;
    }

    foreach (string strPair in arrPairs)
    {
        char chFirstLetter = strPair[0];
        char chSecondLetter = strPair[1];
        intCounter = intCounter - 1;

        if (Char.IsUpper(chFirstLetter))
        {
            if (!Char.IsUpper(chSecondLetter))
            {
                if (intCounter > 0)
                {
                    txtReport.AppendText(GetDescription(strPair.Substring(0, 1)) + " Het.,");
                }
                else
                {
                    txtReport.AppendText(GetDescription(strPair.Substring(0, 1)));
                }
            }
        }
        else
        {
            if (!Char.IsUpper(chSecondLetter))
            {
                if (intCounter > 0)
                {
                    txtReport.AppendText(GetDescription(strPair.Substring(0, 1)) + ",");
                }
                else
                {
                    txtReport.AppendText(GetDescription(strPair.Substring(0, 1)));
                }
            }

        }

    }

    return strTranslation;
}

在文本框中显示没有问题,但是当我尝试将其作为项目放入列表框时,它将其变为null。代替: “Trait 1 Het。,Trait 3出现16次或25%。” 我明白了: “出现16次或25%。”

我尝试将结果添加到ArrayList,然后在处理完所有内容后填充列表框,但结果是一样的。

有关列表框未接受翻译的AaBBCc信息的任何线索,将不胜感激。

1 个答案:

答案 0 :(得分:2)

永远不会设置strTranslation。一切都被推送到txtReport.AppendText