求助,添加扩展数据后无法保存
本帖最后由 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#的,好多地方处理的不怎么好。让大侠们费解了。
我昨天也碰到了这个情况,哈哈,一模一样!最后终于解决了!
得要把表格加入到数据库中!
trans.AddNewlyCreatedDBObject(dt, True)
页:
[1]