I've used this little helper function before:
public static XsltListViewWebPart MakeNewXsltListViewWebPart(SPList list, string webPartTitle)
{
SPView defaultView = list.DefaultView;
XsltListViewWebPart xsltListViewWebPart = new XsltListViewWebPart();
xsltListViewWebPart.ID = "wpListView";
xsltListViewWebPart.Title = webPartTitle;
xsltListViewWebPart.ListName = list.ID.ToString("B").ToUpper();
xsltListViewWebPart.ViewGuid = defaultView.ID.ToString("B").ToUpper();
PropertyInfo nodeProp = defaultView.GetType().GetProperty("Node", BindingFlags.NonPublic | BindingFlags.Instance);
XmlNode node = nodeProp.GetValue(defaultView, null) as XmlNode;
XmlNode toolbarNode = node.SelectSingleNode("Toolbar");
if (toolbarNode != null)
{
if (!toolbarNode.Attributes["Type"].Value.Equals("Freeform"))
{
toolbarNode.Attributes["Type"].Value = "Freeform";
}
}
defaultView.Update();
return xsltListViewWebPart;
}
You will want to customize some of the webpart's properties for your needs (ChromeType, AllowEdit, etc.)
Then to add it to a page, you can use LimitedWebPartManager on a webpart page :
Guid storageKey = Guid.Empty;
using (var manager = item.File.GetLimitedWebPartManager(System.Web.UI.WebControls.WebParts.PersonalizationScope.Shared))
{
var webPart = WebPartHelper.CreateWebPart(web, webPartName, manager);
if (webPart != null)
{
manager.AddWebPart(webPart, webPartZoneName, webPartZoneIndex);
storageKey = manager.GetStorageKey(webPart);
webPart.Dispose();
}
}