This is the second installment of the article DropDownList Inside the GridView. In the previous article DropDownList Inside the GridView I talked about how you can populate the DropDownList inside the GridView with different data depending on the row of the article using a DataSet. In this article I will show demonstrate that how you can achieve the same behavior using Entity Classes.

Introduction:

This is the second installment of the article, DropDownList Inside the GridView. In the previous article DropDownList Inside the GridView I talked about how you can populate the DropDownList inside the GridView with different data using a DataSet. In this article I will demonstrate that how you can achieve the same behavior using Entity Classes.

Analysis:

The first thing that you need to do is to create the Category and Product classes. Take a look at both classes below:

public class Product

{

private int _productID;

private string _productName;

public int ProductID

{

get { return _productID; }

set { _productID = value; }

}

public string ProductName

{

get { return _productName; }

set { _productName = value; }

}

public Product(int productID, string productName)

{

_productID = productID;

_productName = productName;

}

public Product()

{

}

 

Since, a single category can have multiple products that is why I am going to declare a list of Product inside the Category class. Take a look at the Category class to have better idea.

public class Category

{

private int _categoryID;

private string _categoryName;

private List<Product> _productList = new List<Product>();

public int CategoryID

{

get

{

return _categoryID;

}

set { _categoryID = value; }

}

public string CategoryName

{

get { return _categoryName; }

set { _categoryName = value; }

}

public List<Product> ProductList

{

get { return _productList; }

set { _productList = value; }

}

public Category(int categoryID, string categoryName)

{

_categoryID = categoryID;

_categoryName = categoryName;

}

public Category() { }

}

 

After creating the required classes we need to create some dummy data which will be used to populate the DropDownLists. In the code below I demonstrated that how you can create dummy categories and populate dummy products for the particular category. 

private List<Category> categoryList = new List<Category>();

private void FillList()

{

for (int j = 1; j <= 10; j++)

{

Category category = new Category(j,"Category"+j);

for (int i = 1; i <= 10; i++)

{

category.ProductList.Add(new Product(i, "ProductA" + j + i));

}

categoryList.Add(category);

}

 

// Bind the list to the GridView

GridView1.DataSource = categoryList;

GridView1.DataBind();

}

 

The FillList() method above populates the Category class with dummy categories and products. Now, the only thing left to do is to fill the dummy data into the DropDownList. Take a look at the code below:

private int _counter = 0;

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)

{

if (e.Row.RowType == DataControlRowType.DataRow)

{

DropDownList ddl = (DropDownList)e.Row.FindControl("DropDownList1");

ddl.DataSource = categoryList[_counter].ProductList;

ddl.DataTextField = "ProductName";

ddl.DataBind();

// increment the counter

_counter++;

}

}

The code above is implemented in the GridView_RowDataBound event, which is fired every time a row is bound on the GridView. The heart of this application is the line ddl.DataSource = categoryList[_counter].ProductList; which retrieves the product list of a particular category and assign it to the DataSource property of the DropDownList control. After the product list is assigned to the data source I simply assign the ProductName property to the DataTextField property of the DropDownList.

Take a look at the image below to have a clear idea what the GridView looks like at runtime.

I hope you like article, happy coding!