look man i prefer to use like this example:
<asp:TemplateField HeaderText="Car Name" ItemStyle-HorizontalAlign="Center" FooterStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:Label runat="server" Text='<%# Eval("CarName") %>'></asp:Label>
</ItemTemplate>
<FooterTemplate>
<asp:DropDownList ID="SearchCarName" runat="server">
</asp:DropDownList>
</FooterTemplate>
<FooterStyle HorizontalAlign="Center" />
<ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>
and give the same datasource to grid and to dropdown
and in the code behind use this to bind the data
<pre lang="c#"> List<string> lstSearchCarName = new List<string>();
lstSearchCarName.Add("--Search Here--");
lstSearchCarName.AddRange(lstCars.Select(p => p.CarName).Distinct().ToList());</string></string>
<pre lang="c#"> DropDownList ddlSearchCarName = gvCarsForSale.FooterRow.FindControl("SearchCarName") as DropDownList;
ddlSearchCarName.DataSource = lstSearchCarName;
ddlSearchCarName.DataBind();
also add a search button inside any coloumn or in a new column
<pre lang="c#">
<footertemplate>
<asp:linkbutton id="btnSearch" runat="server" onclick="btnSearch_Click" forecolor="DarkRed" xmlns:asp="#unknown">
Text="Search" CommandName="Search"></asp:linkbutton>
</footertemplate>
and in the code behind use this event
protected void btnSearch_Click(object sender, EventArgs e)
{
lstCars = (List<car>)Session["lstCars"];
DropDownList ddlSearchCarName = gvCarsForSale.FooterRow.FindControl("SearchCarName") as DropDownList;
DropDownList ddlSearchNumberOfSeats = gvCarsForSale.FooterRow.FindControl("SearchNumberOfSeats") as DropDownList;
DropDownList ddlSearchModel = gvCarsForSale.FooterRow.FindControl("SearchModel") as DropDownList;
string SearchCarName = ddlSearchCarName.SelectedItem.ToString();
string SearchNumberOfSeats = ddlSearchNumberOfSeats.SelectedValue;
string SearchModel = ddlSearchModel.SelectedValue;
List<car> lst = new List<car>();
if (SearchCarName != "--Search Here--")
{
lst = lstCars.FindAll(p => p.CarName == SearchCarName);
lstCars = lst;
lst = null;
}
if (SearchNumberOfSeats.ToString() != "--Search Here--")
{
lst = lstCars.FindAll(p => p.NumberOfSeats.ToString() == SearchNumberOfSeats);
lstCars = lst;
lst = null;
}
if (SearchModel.ToString() != "--Search Here--")
{
lst = lstCars.FindAll(p => p.Model.ToString() == SearchModel);
lstCars = lst;
lst = null;
}
BindGridAndDropDownLists(lstCars);
}</car></car></car>
hope that help you this is very nice way...