xkaeli 发表于 2012-8-14 21:56:46

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

本帖最后由 xkaeli 于 2012-8-14 22:13 编辑

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


      private void GS_change_Click(object sender, EventArgs e)
      {
            /////以下为对datatable的数据处理,未与CAD进行交互处理/////////////////////////
            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 == "")
            {
                MessageBox.Show("缺少必要数据");
                return;
            }
            if (pl == null)
            {
                MessageBox.Show("没有选择钢束大样");
                return;
            }
            dis_z = CAL_GS.getdis(JJ_zx.Text);
            List<double> dis_h = CAL_GS.getdis(JJ_hx.Text);
            List<double> dis_j = CAL_GS.getdis(JJ_jd.Text);
            if (dis_h.Count != dis_j.Count)
            {
                MessageBox.Show("横向间距和钢束转角个数不统一");
                return;
            }
            Autodesk.AutoCAD.DatabaseServices.DataTable dt = new Autodesk.AutoCAD.DatabaseServices.DataTable();
            dt.TableName = "GSTable";
            dt.AppendColumn(CellType.CharPtr, "命名");
            dt.AppendColumn(CellType.CharPtr, "张拉方式");
            dt.AppendColumn(CellType.CharPtr, "张拉应力");
            dt.AppendColumn(CellType.CharPtr, "钢束型号");
            dt.AppendColumn(CellType.CharPtr, "倒角半径");
            dt.AppendColumn(CellType.CharPtr, "起始单元号");
            dt.AppendColumn(CellType.CharPtr, "控制单元号");
            dt.AppendColumn(CellType.CharPtr, "横向分布");
            dt.AppendColumn(CellType.CharPtr, "各横向分布转角");
            dt.AppendColumn(CellType.CharPtr, "横向每条束数");
            DataCellCollection Row = new DataCellCollection();
            List<DataCell> addstr = new List<DataCell>();
            for (int i = 0; i < 10; i++)
                addstr.Add(new DataCell());
            addstr.SetString(GS_name.Text);
            addstr.SetString(XX_zllx.Text);
            addstr.SetString(XX_zlyl.Text);
            addstr.SetString(XX_gsxh.Text);
            addstr.SetString(XX_djbj.Text);
            string bgnode = "";
            string allnode = "";
            double min =Math.Round( Math.Min(pl.GetPointAtDist(0).X, pl.GetPointAtDist(pl.Length).X),4);
            double max =Math.Round( Math.Max(pl.GetPointAtDist(0).X, pl.GetPointAtDist(pl.Length).X),4);
            double s = Convert.ToDouble(pt_x.Text);
            for (int i = 1; i <= dis_z.Count; i++)
            {
                if (Math.Round( s + dis_z ,4)> min && bgnode == "")
                  bgnode = i.ToString();
                if (Math.Round(s + dis_z,4) >= max)
                {
                  allnode = bgnode + "to" + i.ToString();
                  break;
                }
                s = s + dis_z;
            }
            if (allnode == "")
                allnode = bgnode + "to" + dis_z.Count.ToString();
            addstr.SetString(bgnode); //添加起始单元号
            addstr.SetString(allnode); //添加控制单元号
            addstr.SetString(JJ_hx.Text);//
            addstr.SetString(JJ_jd.Text);
            addstr.SetString(XX_ss.Text);
            for (int i = 0; i < 10; i++)
                Row.Add(addstr);
            dt.AppendRow(Row, true);//以上为对datatable的数据处理,未与CAD进行交互处理/////////////////////////
            using (DocumentLock dl = Doc.LockDocument())//我是通过面板调用对话框的,不加这句老报错
            {
                using (Transaction tran = db.TransactionManager.StartTransaction())
                {
                  pl = (Polyline)tran.GetObject(pl.ObjectId, OpenMode.ForWrite,true);//pl是Polyline类全局变量,之前是以只读方式打开的。
                  if (pl.ExtensionDictionary == new ObjectId())
                        pl.CreateExtensionDictionary();
                  DBDictionary extensionDic = (DBDictionary)tran.GetObject(pl.ExtensionDictionary, OpenMode.ForWrite,true);
                  extensionDic.SetAt("GSTable", dt);
                  if (AddToMCT.Checked)
                        add_to_view(pl.ObjectId);
                  tran.Commit();
                }
            }
      }

运行后出现“写入保存文件错误”
本人是自学C#的,好多地方处理的不怎么好。让大侠们费解了。

绒绒 发表于 2013-6-21 09:34:17

我昨天也碰到了这个情况,哈哈,一模一样!最后终于解决了!
得要把表格加入到数据库中!
trans.AddNewlyCreatedDBObject(dt, True)
页: [1]
查看完整版本: 求助,添加扩展数据后无法保存