CodeMemberMethod CreateDBMethod (ControlBuilder builder, string name, Type container, Type target)
{
CodeMemberMethod method = new CodeMemberMethod ();
method.Attributes = MemberAttributes.Public | MemberAttributes.Final;
method.Name = name;
method.Parameters.Add (new CodeParameterDeclarationExpression (typeof (object), "sender"));
method.Parameters.Add (new CodeParameterDeclarationExpression (typeof (EventArgs), "e"));
CodeTypeReference containerRef = new CodeTypeReference (container);
CodeTypeReference targetRef = new CodeTypeReference (target);
CodeVariableDeclarationStatement decl = new CodeVariableDeclarationStatement();
decl.Name = "Container";
decl.Type = containerRef;
method.Statements.Add (decl);
decl = new CodeVariableDeclarationStatement();
decl.Name = "target";
decl.Type = targetRef;
method.Statements.Add (decl);
CodeVariableReferenceExpression targetExpr = new CodeVariableReferenceExpression ("target");
CodeAssignStatement assign = new CodeAssignStatement ();
assign.Left = targetExpr;
assign.Right = new CodeCastExpression (targetRef, new CodeArgumentReferenceExpression ("sender"));
method.Statements.Add (AddLinePragma (assign, builder));
assign = new CodeAssignStatement ();
assign.Left = new CodeVariableReferenceExpression ("Container");
assign.Right = new CodeCastExpression (containerRef,
new CodePropertyReferenceExpression (targetExpr, "BindingContainer"));
method.Statements.Add (AddLinePragma (assign, builder));
return method;
}