To edit attribute value, if you can use LISP in your workflow, you can just call the command "ATTIPEDIT" in list statement like:
(command "ATTIPEDIT",....).
If you want a .NET API routine that can be used in your .NET addins, you look at Editor.GetNestedEntity() to allow user to select an attribute in a block reference. Once an attribute is selected (the code then knows its ObjectId), you are free to do whatever you want to the attribute selected. the code (in C#) would look like:
private void EditAtt(Editor ed)
{
var opt=new PromptNestedEntityOptions("\nPick an attribute:");
var res=ed.GetNestedEntity(opt);
if (res.Status==PromptStatus.OK)
{
ChangeAttValue(res.ObjectId, ed);
}
}
private void ChangeAttValue(ObjectId attId, Editor ed)
{
using (var tran=attId.Database.TransactionManager.StartTransaction())
{
var att=tran.GteObject(attId, OpenMode.ForRead) As AttributeReference;
if (att!=null)
{
ed.WriteMessage("\nCurrent Attribute Value: {0}", att.TextString);
var attValueRes=ed.GetString("\nEnter new attribute value:");
if (attValueRes.Status==PromptStatus.OK)
{
att.UpgradeOpen();
att.TextString=attValueres.StringValue;
}
}
tran.Commit();
}
}
Of course, after user picks an attribute, you can show a data input form as dialog box (but in this case, I'd ask user to pick block, and display all attributes on the form for user to edit).