Applying TrimSideSpaces() method to multiple string properties
single letter variables shouldn't be used except for loop variables
shortening variables names removes readability of the code  
if you don't need List&lt;T&gt; specific methods consider to change List&lt;ITemplatePart&gt; _options to IList&lt;ITemplatePart&gt;. You should if possible code against interfaces instead of implementations.  
instead of calling the TrimSideSpaces() method, which in reality does only return an empty string, you should just use the built in Trim() method of the String class which removes any leading and trailing space


Refactoring  

By using the overloaded CreateTemplatePart() method  

public static TemplatePart CreateTemplatePart(string partName, string basePart)
{
    return new TemplatePart
    {
        PartName = partName.Trim(),
        BasePart = basePart.Trim()
    };
}

public static TemplatePart CreateTemplatePart(DataTable table, DataRow row, int rowIndex)
{
    TemplatePart templatePart = CreateTemplatePart(row.Field&lt;string&gt;(Strings.TemplateSpreadSheet_Column_PartName),
              row.Field&lt;string&gt;(Strings.TemplateSpreadSheet_Column_BasePart));
    templatePart.Key = rowIndex;
    templatePart.Category = ExtractVendor(table.TableName).Trim();
    return templatePart;
}  


Update based on the comments  


  In regards to your 4th point, TrimSideSPaces() returns the content of the property without it's leading and trailing spaces. "which in reality does only return an empty string" how?  


Using the method in your code the first test fails while the second one passes.  

[TestMethod()]
public void TrimSideSpacesTest_WillFail()
{
    SnippetsCodeReview target = new SnippetsCodeReview();
    string value = "     g     ";
    string expected = "g";
    string actual = target.TrimSideSpaces(value);
    Assert.AreEqual(expected, actual);
}
[TestMethod()]
public void TrimSideSpacesTest_WillPass()
{
    SnippetsCodeReview target = new SnippetsCodeReview();
    string value = "     g     ";
    string expected = String.Empty;
    string actual = target.TrimSideSpaces(value);
    Assert.AreEqual(expected, actual);
}  



  The suggested overloaded CreateTemplatePart() improves the code. how?  



Improvement could be the less repetitions because we use the overloaded CreateTemplatePart() method in which we call the Trim().  
Also, this "improvement" comes obviously with a lack of readability. This is partly because the Strings constants have some really long names.  


An improved refactoring after renaming the overloaded methods to Create. 

public static TemplatePart Create(DataTable table, DataRow row, int rowIndex)
{
    TemplatePart templatePart = Create(row);

    templatePart.Key = rowIndex;
    templatePart.Category = ExtractVendor(table.TableName).Trim();

    return templatePart;
}

private static TemplatePart Create(DataRow row)
{
    String partName = row.Field&lt;string&gt;(Strings.TemplateSpreadSheet_Column_PartName);
    String basePart = row.Field&lt;string&gt;(Strings.TemplateSpreadSheet_Column_BasePart);

    return Create(partName, basePart);
}

public static TemplatePart Create(string partName, string basePart)
{
    return new TemplatePart
    {
        PartName = partName.Trim(),
        BasePart = basePart.Trim()
    };
}