The Class could be defined as the following:
public class Category
{
public int CategoryID { get; set; }
public int ParentCategoryID { get; set; }
public string CategoryName { get; set; }
public List<Category> subCategories { get; set; }
}
Of course you would also want a Table in the DB that has the CategoryID, ParentCategoryID, and CategoryName as Fields. To get all subcategories for a Category, perform a "select categoryID from CategoriesTable where CategoryName = 'Electronic-tv'"... then use this categoryID to obtain all subCategories that are related: "Select CategoryID, CategoryName from CategoriesTable where ParentCategoryID = 'ID_FROM_PREVIOUS_QUERY'"
This would require only one table in the database.
To display the data:
If there is not a large amount of data in the table, I would recommend using a DataAdapter and the .Fill() method to fill a DataTable. Then setup a ResultsForm with a DataGridView on it. Pass the DataTable into the ResultsForm and display in the dataGridView. This is not a great solution for large amounts of data, but the implementation is fairly easy.
You might have a list of main categories on your Main Form, and the user double-clicks an item in the list. At which point you perform the above queries to gather all subcategories from the database for that category. You fill up a dataTable or a List<Category> with the results of the query, and display in the datagridview. The user then double-clicks a sub-category in the ResultsForm, at which point, you could perform the same operation (perform above queries, get subCats for Cat, display in resultsForm)