Programitically add a Drop Down Menu inside a Datagrid

  This is what my Datagrid looks like
Name     Phone          Rank               Years Participated      View Details

All the columns are sortable. Now, I have people have have participated more that 1 year. So I  want to group the entries by Name and then put all the years participated in a drop down menu. When a person selects a year it should then jump to the details page. Is it possible to put this functionality inside a Template Column somehow. Does anyone have any experience with this.

Who is Participating?
ThaloxConnect With a Mentor Commented:

Hi Brij,

i just "discovered" that vb uses (i) as indexer insted of [i] in c#
so i think replacing all [] by () should solve the problem.


I assume your dropdow menu is a dropDownList-Control which has values like

and on selecting one entry the user should be redirected to another page, right?

if so, you could place the list in a template-column or by code, but you allways have to fill in the value by yourself
(I dont know a way to let .net do this for you, but maybe there is...)

so i would prefer to add the controls by code after the databinding of the grid.
go through each row of your datasource, get the id of your people and with this select the years and put them into the new created list.
add an event-handler for the SelectedIndexChanged event

to determine, which control raised the event, set the name of each dropdownlist-control to something containing the id of the corresponding people
this id and the selected year could then be passed to your details-page

maybe there is an easier solution for this, but it works for me.
if you need any sample code let me know

BrijBhasinAuthor Commented:
Hi Thalox,
  I think your explanation is pretty close to what I'm looking for. Could you give me some sample code?

The 14th Annual Expert Award Winners

The results are in! Meet the top members of our 2017 Expert Awards. Congratulations to all who qualified!


try this

private void BindData()
      // load Data (Name     Phone          Rank)
      DataSet ds = "<replace with your datasource>";

      Grid.dataSource = ds;

      // go through rows an add lists
      for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
            DropDownList dl = new DropDownList();
            // set name
            dl.ID = "dl_" + ds.Tables[0].Rows[i]["id"].ToString();
            //fill list (replace with own code)
            dl.DataSource = "select years from x where id = '" + ds.Tables[0].Rows[i]["id"].ToString() + "'";
            dl.SelectedIndex = 0;
            // add eventhandler
            dl.SelectedIndexChanged +=new EventHandler(dl_SelectedIndexChanged);

            // add to grid (need to replace 3 with right index)

private void dl_SelectedIndexChanged(object sender, EventArgs e)
      // get id and year
      string id = ((DropDownList)sender).ID.Replace("dl_", "");
      string year = ((DropDownList)sender).SelectedValue;

      // go to details
      Response.Redirect("details.aspx?id=" + id + "&year=" + year);

I think this should work,


BrijBhasinAuthor Commented:
Hi Thalox,
  I'm trying to convert your code into VB and I get an error at

do while i < dstUserListingB.Tables[0].Rows.Count

BC30452: Operator '<' is not defined for types 'Integer' and 'System.Data.DataTableCollection'.

Do you know how I can fix this.



are you sure, the error is caused by this line?
it looks right to me, but i dont have much experience in vb

is this the right syntax for a do-while-loop?
in c# it is
do {

} while <expression>

it seems that "dstUserListingB.Tables[0].Rows.Count" is only evaluated to "dstUserListingB.Tables"

could you post a little more of your code?

There is a pretty awesome and comprehensive article on how to do it at:
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.