明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1582|回复: 1

求助,添加扩展数据后无法保存

[复制链接]
发表于 2012-8-14 21:56:46 | 显示全部楼层 |阅读模式
本帖最后由 xkaeli 于 2012-8-14 22:13 编辑

刚做了一段程序,对多线段添加datatable扩展数据后,文件无法保存。以下为代码


  1.         private void GS_change_Click(object sender, EventArgs e)
  2.         {
  3.             /////以下为对datatable的数据处理,未与CAD进行交互处理/////////////////////////
  4.             if (JJ_hx.Text == "" || JJ_jd.Text == "" || JJ_zx.Text == "" || XX_djbj.Text == "" || XX_gsxh.Text == "" || XX_zllx.Text == "" || XX_zlyl.Text == "" || XX_ss.Text == "")
  5.             {
  6.                 MessageBox.Show("缺少必要数据");
  7.                 return;
  8.             }
  9.             if (pl == null)
  10.             {
  11.                 MessageBox.Show("没有选择钢束大样");
  12.                 return;
  13.             }
  14.             dis_z = CAL_GS.getdis(JJ_zx.Text);
  15.             List<double> dis_h = CAL_GS.getdis(JJ_hx.Text);
  16.             List<double> dis_j = CAL_GS.getdis(JJ_jd.Text);
  17.             if (dis_h.Count != dis_j.Count)
  18.             {
  19.                 MessageBox.Show("横向间距和钢束转角个数不统一");
  20.                 return;
  21.             }
  22.             Autodesk.AutoCAD.DatabaseServices.DataTable dt = new Autodesk.AutoCAD.DatabaseServices.DataTable();
  23.             dt.TableName = "GSTable";
  24.             dt.AppendColumn(CellType.CharPtr, "命名");
  25.             dt.AppendColumn(CellType.CharPtr, "张拉方式");
  26.             dt.AppendColumn(CellType.CharPtr, "张拉应力");
  27.             dt.AppendColumn(CellType.CharPtr, "钢束型号");
  28.             dt.AppendColumn(CellType.CharPtr, "倒角半径");
  29.             dt.AppendColumn(CellType.CharPtr, "起始单元号");
  30.             dt.AppendColumn(CellType.CharPtr, "控制单元号");
  31.             dt.AppendColumn(CellType.CharPtr, "横向分布");
  32.             dt.AppendColumn(CellType.CharPtr, "各横向分布转角");
  33.             dt.AppendColumn(CellType.CharPtr, "横向每条束数");
  34.             DataCellCollection Row = new DataCellCollection();
  35.             List<DataCell> addstr = new List<DataCell>();
  36.             for (int i = 0; i < 10; i++)
  37.                 addstr.Add(new DataCell());
  38.             addstr[0].SetString(GS_name.Text);
  39.             addstr[1].SetString(XX_zllx.Text);
  40.             addstr[2].SetString(XX_zlyl.Text);
  41.             addstr[3].SetString(XX_gsxh.Text);
  42.             addstr[4].SetString(XX_djbj.Text);
  43.             string bgnode = "";
  44.             string allnode = "";
  45.             double min =Math.Round( Math.Min(pl.GetPointAtDist(0).X, pl.GetPointAtDist(pl.Length).X),4);
  46.             double max =Math.Round( Math.Max(pl.GetPointAtDist(0).X, pl.GetPointAtDist(pl.Length).X),4);
  47.             double s = Convert.ToDouble(pt_x.Text);
  48.             for (int i = 1; i <= dis_z.Count; i++)
  49.             {
  50.                 if (Math.Round( s + dis_z[i-1] ,4)> min && bgnode == "")
  51.                     bgnode = i.ToString();
  52.                 if (Math.Round(s + dis_z[i-1],4) >= max)
  53.                 {
  54.                     allnode = bgnode + "to" + i.ToString();
  55.                     break;
  56.                 }
  57.                 s = s + dis_z[i-1];
  58.             }
  59.             if (allnode == "")
  60.                 allnode = bgnode + "to" + dis_z.Count.ToString();
  61.             addstr[5].SetString(bgnode); //添加起始单元号
  62.             addstr[6].SetString(allnode); //添加控制单元号
  63.             addstr[7].SetString(JJ_hx.Text);//
  64.             addstr[8].SetString(JJ_jd.Text);
  65.             addstr[9].SetString(XX_ss.Text);
  66.             for (int i = 0; i < 10; i++)
  67.                 Row.Add(addstr);
  68.             dt.AppendRow(Row, true);//以上为对datatable的数据处理,未与CAD进行交互处理/////////////////////////
  69.             using (DocumentLock dl = Doc.LockDocument())//我是通过面板调用对话框的,不加这句老报错
  70.             {
  71.                 using (Transaction tran = db.TransactionManager.StartTransaction())
  72.                 {
  73.                     pl = (Polyline)tran.GetObject(pl.ObjectId, OpenMode.ForWrite,true);//pl是Polyline类全局变量,之前是以只读方式打开的。
  74.                     if (pl.ExtensionDictionary == new ObjectId())
  75.                         pl.CreateExtensionDictionary();
  76.                     DBDictionary extensionDic = (DBDictionary)tran.GetObject(pl.ExtensionDictionary, OpenMode.ForWrite,true);
  77.                     extensionDic.SetAt("GSTable", dt);
  78.                     if (AddToMCT.Checked)
  79.                         add_to_view(pl.ObjectId);
  80.                     tran.Commit();
  81.                 }
  82.             }
  83.         }

运行后出现“写入保存文件错误”
本人是自学C#的,好多地方处理的不怎么好。让大侠们费解了。
发表于 2013-6-21 09:34:17 | 显示全部楼层
我昨天也碰到了这个情况,哈哈,一模一样!最后终于解决了!
得要把表格加入到数据库中!
trans.AddNewlyCreatedDBObject(dt, True)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 15:37 , Processed in 0.179829 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表