ITemplate

Имеется grid, в который автоматом должно из БД подыматься и отображаться таблица.
   IList<Product> products = this.FacadeProvider.GetFacade<IProductsFacade>().GetAllProducts();   AdminGridView.DataSource = products;   AdminGridView.DataBind();
Вся работа с БД через NHibernate. Поэтому, например, при отображении таблицы в столбце "CategoryID" будет отбражаться тип объекта который там лежит, а не само значение.Нужно чтобы в данной ячейке этого столбца был выпадающий список (ComboBox), в котором лежат все Id таблицы Category. Активное значение в ComboBox - id продукта.Что у меня есть:
   protected void Page_Load(object sender, EventArgs e) {   // достаем все продукты   IList<Product> products = this.FacadeProvider.GetFacade<IProductsFacade>().GetAllProducts();   AdminGridView.DataSource = products;   AdminGridView.DataBind();   // получаю все категории   IList<Category> categories = this.FacadeProvider.GetFacade<IProductsFacade>().GetCategories();   // достаю нужную мне колонку из ASPxGridView   (DevExpress control)               GridViewDataTextColumn txtColumn = (GridViewDataTextColumn)this.AdminGridView.Columns[1];   // присваиваю свой шаблон   txtColumn.DataItemTemplate = new ComboBoxTemplate(categories);}
Собственно сам шаблон:
   public class ComboBoxTemplate : ITemplate {      private IList<Category> m_categories;      public ComboBoxTemplate(IList<Category> categories) {         m_categories = categories;      }      public void InstantiateIn(Control container) {         ASPxComboBox comboBox = new ASPxComboBox();         comboBox.DataSource = m_categories;                     comboBox.TextField = "CategoryID";         comboBox.ValueField = "CategoryID";         comboBox.ValueType = typeof(System.String);                   // первый параметр надо другой, но какой...         comboBox.Value = DataBinder.Eval(m_categories[1], "CategoryID");                     container.Controls.Add(comboBox);                  }   }
ComboBox создается, туда ложатся все Id Category. Но не могу понять как нужный Id сделать активным.Сделал так, чтобы хоть как-то работало.
comboBox.Value = DataBinder.Eval(m_categories[1], "CategoryID"); 
Что нужно положить первым параметром? Понимаю что нужно использовать container, но в него надо же что-то положить.
1 ответ

Вообщем сделал, немного не красиво, но тем не менее. Может кому пригодится.У грида нету возмжности достучаться до ячейки способом вида Column[x][y], пришлось выкручиваться.
public class ComboBoxTemplate : ITemplate {   private IList<Category> m_categories;   public ComboBoxTemplate(IList<Category> categories) {      m_categories = categories;   }   public void InstantiateIn(Control container) {      ASPxComboBox comboBox = new ASPxComboBox();      comboBox.DataBinding += new EventHandler(combo_DataBinding);      container.Controls.Add(comboBox);   }   private void combo_DataBinding(object sender, EventArgs e) {      ASPxComboBox comboBox = (ASPxComboBox)sender;      int idxEnd = comboBox.NamingContainer.ID.IndexOf("_");      string cellId = comboBox.NamingContainer.ID.Substring(4, idxEnd - 4);      Product product = (Product)((ASPxGridView)comboBox.NamingContainer.NamingContainer).GetRow(int.Parse(cellId));      comboBox.DataSource = m_categories;      comboBox.TextField = "CategoryID";      comboBox.ValueField = "CategoryID";      comboBox.ValueType = typeof(System.String);      comboBox.Value = DataBinder.Eval(product.Category, "CategoryID");   }}