Q:

Sitecore: Assign workflow to an item programmatically

I have configured a workflow, starts with "Draft" state as usual. And I have configured the workflow for standard values of the template. It works perfect in Content editor.
(When I create an item using the content editor, once I create the item, Workflow gets assigned to the item and it's state becomes "Draft".)
But when I create an item programmatically under the above template it does not assign the workflow.
What should I do to assign workflow? Please share any code samples if you have.
Thanks.
Sitecore.Data.Items.TemplateItem template = this.MasterDatabase.GetItem("/sitecore/templates/user defined/sample types");
Sitecore.Data.Items.Item parent = this.MasterDatabase.GetItem(parentId); 

Sitecore.Data.Items.Item newItem;                
// Create new item and retrieve it
newItem = template.CreateItemFrom("sampleName", parent);

newItem.Editing.BeginEdit();

newItem.Name = StringFormatter.CreateItemNameFromID(this.newItem);
newItem.Fields["Title"].Value = "Sample Title"

newItem.Editing.EndEdit();

A:

I would not use Dhanuka777's answer as it does not utilise Sitecore's Workflow State Commands and the useful functionality that comes with it e.g. email generation. It also requires hardcoding Guids.
Benefits of the below code:

Utilise Sitecore’s State Commands and the nice functionality they
have e.g. generating emails to alert users etc 
Don’t store the Guids of the States and Commands inside the solution
Independent of Sitecore's Context
Abstract so it can be used for all Workflows in Sitecore.

    public bool UpdateWorkflow(WorkflowState newWorkflowState, Item item)
    {
        Assert.ArgumentNotNull(newWorkflowState, "The new WorkflowState can not be null");
        Assert.ArgumentNotNull(item, "Item can not be null");

        bool successful = false;

        WorkflowState currentWorkflowState = GetWorkflowStateForItem(item);

        if (currentWorkflowState != newWorkflowState)
        {
            IWorkflow workflow = GetWorkflowOfItem(item);

            if (workflow != null)
            {
                List<WorkflowCommand> applicableWorkflowCommands = workflow.GetCommands(currentWorkflowState.StateID).ToList();

                foreach (var applicableWorkflowCommand in applicableWorkflowCommands)
                {
                    Item commandItem = _database.GetItem(applicableWorkflowCommand.CommandID);

                    string nextStateId = commandItem["Next state"];

                    if (nextStateId == newWorkflowState.StateID)
                    {
                        WorkflowResult workflowResult = workflow.Execute(applicableWorkflowCommand.CommandID, item, "", false);
                        successful = workflowResult.Succeeded;
                        break;
                    }
                }
            }
        }
        else
        {
            successful = true;
        }

        return successful;
    }

    public WorkflowState GetWorkflowStateForItem(Item item)
    {
        var workflow = GetWorkflowOfItem(item);
        return workflow != null ? workflow.GetState(item) : null;
    }

    public IWorkflow GetWorkflowOfItem(Item item)
    {
        return _database.WorkflowProvider.GetWorkflow(item);
    }

    private Database _database
    {
        get
        {
            return Sitecore.Data.Database.GetDatabase("master");
        }
    }

A:

Solved the issue with Standard Fields,
newItem.Editing.BeginEdit();                    
newItem.Fields["__Workflow"].Value = "{4D1F00EF-CA5D-4F36-A51E-E77E2BAE4A24}"; //Set workflow
newItem.Fields["__Workflow state"].Value = "{7F39DF46-B4B9-4D08-A0D4-32DE6FD643D1}"; //Set   workflow state to Unposted.
newClassified.Editing.EndEdit();  

