首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AutoCAD eNotOpenForWrite

AutoCAD eNotOpenForWrite
EN

Stack Overflow用户
提问于 2014-10-14 18:20:41
回答 4查看 1.9K关注 0票数 3

我正在用C#.NET编写一个AutoCAD插件,我需要一种将Table.IsReadEnabledTable.IsWriteEnabled设置为true的方法。这里显示了一个名为addRow()的方法:

代码语言:javascript
复制
public void addRow(String[] data)
        {
            OpenCloseTransaction tr = doc.TransactionManager.StartOpenCloseTransaction();
            DocumentLock docLock = doc.LockDocument();
            using (tr)
            using (docLock)
            {
                bool isRead = IsReadEnabled;
                bool isWrite = IsWriteEnabled;

                BlockTable bt = (BlockTable)tr.GetObject(doc.Database.BlockTableId, OpenMode.ForRead);
                BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt[Autodesk.AutoCAD.DatabaseServices.BlockTableRecord.ModelSpace], OpenMode.ForWrite);

                selectedRow++; //Sets the lowest empty row as the one to be modified

                //Adding data to each cell
                for (int i = 0; i < data.Length; i++)
                {
                    Cells[selectedRow, i].SetValue(data[i], ParseOption.SetDefaultFormat);
                }
                GenerateLayout();

                //Attempting to update database with new data

                btr.AppendEntity(this);
                tr.AddNewlyCreatedDBObject(this, true);

                tr.Commit();

            }
        }

第一次将数据添加到我的表时,它运行良好,但是tr.Commit调用将表的IsReadEnabledIsWriteEnabled设置为false,即使使用OpenClose事务也是如此。这将导致AutoCAD在试图向表中添加新的数据行时崩溃。我需要在tr.commit调用之后重新启用写入和读取,或者设置它,这样就不会禁用写入和读取。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-10-16 13:19:28

代码语言:javascript
复制
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);
}

我只需要添加一个if语句!

票数 1
EN

Stack Overflow用户

发布于 2014-10-15 06:09:10

我认为您应该使用StartTransaction而不是StartOpenCloseTransaction。见附件中的博客。

干杯,阿兰

http://spiderinnet1.typepad.com/blog/2012/08/autocad-net-openclosetransaction-can-it-be-nested.html

票数 0
EN

Stack Overflow用户

发布于 2014-12-09 20:38:09

最有可能的情况是,当先前的事务没有正确地处理时,就会发生此错误。问题中的"addRow“函数就是如何不编码的例子。始终使用C#“使用”语句启动事务。它确保事务被正确地处理。检查并修复代码中启动事务的所有位置。

代码语言:javascript
复制
using(OpenCloseTransaction tr = doc.TransactionManager.StartOpenCloseTransaction())
{
   // your logic here
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26367657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档