[MSCE C#]修改替换复杂元素中的TextNode中的文本问题

从单元库中插入的复杂元素如图 复杂元素的子元素有cellheader,Dimension 等。遍历复杂元素获取cellheader, 再次遍历cellheader获得TextNodeElement,尝试修改TextNodeElement的TextElement的内容并替换。尝试了多种方式都没有成功。以下是我尝试过的代码,麻烦帮忙指正。方法一》ReplaceInModel报错,方法二》Rewrite报错, 方法三》ReplaceCurrentElement报错

app.ActiveSettings.Level = app.ActiveDesignFile.Levels[lvl_Erkundung_DS.Name];
BIM.Point3d scale = app.Point3dOne();
Matrix3d matrix3d = app.Matrix3dIdentity();
BIM.CellElement ds = app.CreateCellElement2("01_DS_mit_Anmerkung", Koordinaten, scale, false, matrix3d); //01_DS_mit_Anmerkung
ds.ResetElementEnumeration();
var subEls_ds = ds.GetSubElements(); 
while (subEls_ds.MoveNext())
{
    var subEle_ds = subEls_ds.Current;
    if (subEle_ds.Type == BIM.MsdElementType.CellHeader)
    {
        BIM.CellElement cellElCur = subEle_ds as BIM.CellElement;
        var subEls_cellEle = cellElCur.GetSubElements();
        while (subEls_cellEle.MoveNext())//遍历Cellheader子元素
        {
            var subEl_cellEle = subEls_cellEle.Current;
            //MessageBox.Show(subElCur.Type.ToString());
            if (BIM.MsdElementType.TextNode == subEl_cellEle.Type)
            {
                BIM.TextNodeElement curTxtNodeEle = subEl_cellEle as BIM.TextNodeElement;
                Element TxtNodeEle = ConvertToDgnNetEle(curTxtNodeEle);
                BME.TextNodeElement textNodeElem = TxtNodeEle as BME.TextNodeElement;
                BIM.ElementEnumerator subEles_TxtNode = curTxtNodeEle.GetSubElements();

                //Methode 3:
                //BIM.TextNodeElement newTextNode = app.CreateTextNodeElement2(curTxtNodeEle, curTxtNodeEle.Origin, curTxtNodeEle.Rotation);
                //for (int i = 0; i < curTxtNodeEle.TextLinesCount; i++)
                //{
                //    MessageBox.Show((curTxtNodeEle.TextLinesCount).ToString());
                //    newTextNode.AddTextLine(m_pktnr);
                //}
                //cellElCur.ReplaceCurrentElement(newTextNode);

                ////Methode 2:
                //while (subEles_TxtNode.MoveNext())
                //{
                //    var subEle_TxtNode = subEles_TxtNode.Current;
                //    if (subEle_TxtNode.Type == BIM.MsdElementType.Text)
                //    {
                //        BIM.TextElement oldTextEl = subEle_TxtNode.AsTextElement();
                //        oldTextEl.Text = m_pktnr;
                //        oldTextEl.Rewrite();
                //    }
                //}

                //Methode 1
                while (subEles_TxtNode.MoveNext())//遍历TextNode子元素
                {
                    var subEle_TxtNode = subEles_TxtNode.Current;
                    if (BIM.MsdElementType.Text == subEle_TxtNode.Type)
                    {
                        Element oldTxtEle = ConvertToDgnNetEle(subEle_TxtNode);
                        BME.TextElement oldtxtelement = oldTxtEle as BME.TextElement;
                        BME.TextHandlerBase txtHandlerBase = oldtxtelement as BME.TextHandlerBase;
                        BME.TextEdit oldtxtEdit = txtHandlerBase.AsTextEdit();
                        TextQueryOptions options = new TextQueryOptions();
                        TextPartIdCollection collId = txtHandlerBase.GetTextPartIds(options);
                        foreach (TextPartId id in collId)
                        {

                            BN.TextBlock oldtxtBlock = txtHandlerBase.GetTextPart(id);
                            //BN.Caret caretStart = oldtxtBlock.CreateStartCaret();
                            //BN.Caret caretEnd = oldtxtBlock.CreateEndCaret();
                            oldtxtBlock.AppendText(m_pktnr);
                            BME.TextHandlerBase newtxtHandlerBase = TextHandlerBase.CreateElement(null, oldtxtBlock);
                            BME.TextEdit newtextEdit = newtxtHandlerBase.AsTextEdit();
                            BME.TextElement newtextElement = newtxtHandlerBase as BME.TextElement;
                            oldtxtEdit.ReplaceTextPart(id, oldtxtBlock);
                            //oldtxtEdit.AddToModel();
                            oldtxtEdit.ReplaceInModel(newtextElement);
                        }
                    }
                }

            }
        }
    }
}
//Methode 3:
//ds.Redraw();
//ds.Rewrite();