I think the problem is here (line 35-37):
ListItem vendor = new ListItem((string)drVend[1], Convert.ToString(drVend[0]));
dt.Rows.Add(vendor);
You added an array of size 1 into the Rows collection. The first dimension of your table is VendorDescription, which you later had as DataTextField of the drop down list. This caused the drop down list to have different VendorDescription as Text, but always "" (empty values) as value. When you do a postback with the same empty value, OnSelectedItemChanged event is not going to trigger because nothing was changed. To verify, open the rendered html code on browser side, find the <select> tag that was rendered by your drop down list, you will probably find that all the options have empty strings as values. If this is so, then I was right. And the solution is simply changing line 35-37 into something like this:
string text = (string)drVend[1];
string value = Convert.ToString(drVend[0]));
dt.Rows.Add( new object[]{text, value} ); // now you have a row of 2-dimensions
Debugger is my best friend. (
http://haoest.info)