- 积分
- 781
- 明经币
- 个
- 注册时间
- 2011-5-24
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
本帖最后由 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[0].SetString(GS_name.Text);
- addstr[1].SetString(XX_zllx.Text);
- addstr[2].SetString(XX_zlyl.Text);
- addstr[3].SetString(XX_gsxh.Text);
- addstr[4].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[i-1] ,4)> min && bgnode == "")
- bgnode = i.ToString();
- if (Math.Round(s + dis_z[i-1],4) >= max)
- {
- allnode = bgnode + "to" + i.ToString();
- break;
- }
- s = s + dis_z[i-1];
- }
- if (allnode == "")
- allnode = bgnode + "to" + dis_z.Count.ToString();
- addstr[5].SetString(bgnode); //添加起始单元号
- addstr[6].SetString(allnode); //添加控制单元号
- addstr[7].SetString(JJ_hx.Text);//
- addstr[8].SetString(JJ_jd.Text);
- addstr[9].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#的,好多地方处理的不怎么好。让大侠们费解了。
|
|