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!