使用C#删除AutoCAD中的表行

本文关键字:AutoCAD 删除 使用 | 更新日期: 2023-09-27 18:26:42

我正在编写一种方法,根据第一列的值在AutoCAD中删除表行。

我的代码是:

public void deleteRow(String openingName)
{
    Transaction tr = doc.TransactionManager.StartTransaction();
    DocumentLock docLock = doc.LockDocument();
    using (tr)
    using (docLock)
    {
        if (!IsWriteEnabled || !IsReadEnabled) //Committing transactions closes everything for reading and writing so it must be reopened
        {
            tr.GetObject(this.ObjectId, OpenMode.ForRead);
            tr.GetObject(this.ObjectId, OpenMode.ForWrite);
        }
        for (int i = 1; i < NumRows; i++)
        {
             if (Cells[i, 0].GetTextString(FormatOption.ForExpression).Equals(openingName))
             {
                 DeleteRows(i, 1);
             }
        }
        GenerateLayout();
        tr.Commit();
    }
}

然而,它所做的只是删除行中单元格的值,留下一个空行。

如何删除行本身?

使用C#删除AutoCAD中的表行

我想明白了。我需要去掉GenerateLayout()调用

if (!IsWriteEnabled || !IsReadEnabled) 
        {
           var tb = tr.GetObject(this.ObjectId, OpenMode.ForRead) as Table;
           // tr.GetObject(this.ObjectId, OpenMode.ForWrite);
           tb.UpgradeOpen();
           for (int i = 1; i < NumRows; i++)
           {
               if (Cells[i, 0].GetTextString(FormatOption.ForExpression).Equals(openingName))
               {
                 tb.DeleteRows(i, 1);
                }
            }
            tb.DowngradeOpen();
         }