Подгрузка данных из базы данных в TemplateColumn созданной динамически в контроле DataGrig

Ankh

По воле судьбы нужно сделать DataGrid который выводят колонки типа TemplateColumn из списка заведенного в БД, т.е. добавляет их динамически.Как добавить динамически разобрался, а как можно в такую TemplateColumn засунуть, например, ссылку, которая в своем URL будет содержать значения из базы данных? Ну или вообще, как связать программно созданную TemplateColumn с данными?Что-то метод "google it" мне ничего полезного не дал.
2 ответа

Ankh

Вот пример того, как добавляю динамически колонки:
public class DataGridTemplateColumn : System.Web.UI.Page, ITemplate
{
 ListItemType templateType;
 string columnName;

 public DataGridTemplateColumn(ListItemType templateType, string columnName)
 {
 this.templateType = templateType;
 this.columnName = columnName;
 }

 public void InstantiateIn(System.Web.UI.Control container)
 {
 Literal lc = new Literal();
 CheckBox chkb = new CheckBox();
 //LinkButton lb = new LinkButton(); 

 switch (templateType)
 {
 case ListItemType.Header:
 lc.Text = "<B>" + columnName + "</B>";
 container.Controls.Add(chkb);
 container.Controls.Add(lc);
 break;
 case ListItemType.Item:
 chkb.ID = columnName;
 container.Controls.Add(chkb);
 container.Controls.Add(lc);
 break;
 case ListItemType.EditItem:
 TextBox tb = new TextBox();
 tb.Text = "";
 container.Controls.Add(tb);
 break;
 case ListItemType.Footer:
 lc.Text = "<I>" + columnName + "</I>";
 container.Controls.Add(lc);
 break;
 }
 }
}

TemplateColumn CreateTemplateColumn(string identifier, string headerText, string dataField, bool isSortable, int isVisible)
{
 TemplateColumn column = new TemplateColumn();

 column.HeaderTemplate = new DataGridTemplateColumn(ListItemType.Header, column.HeaderText);
 column.ItemTemplate = new DataGridTemplateColumn(ListItemType.Item, "Select1");

 return column;
}

protected void Page_Load(object sender, System.EventArgs e)
{
 dgInbox.Columns.Add(CreateTemplateColumn("namr", "Short Name", "short_name", true, 1));
}


Ankh

Вот то же самое что могу прописать в колонке в aspx файле, только программно.
<asp:TemplateColumn>
 <HeaderTemplate>
 <asp:LinkButton <span>Text</span><span>=</span><span>"Отправитель"</span> <span>runat</span><span>=</span><span>"server"</span> <span>CommandName</span><span>=</span><span>"sender"</span> <span>ID</span><span>=</span><span>"lbSender"</span> <span>CssClass</span><span>=</span><span>"simple_link"</span> <span>Width</span><span>=</span><span>"20"</span>>
 <<span>/</span>asp:LinkButton>
 <img <span>id</span><span>=</span><span>"img_sender"</span> <span>runat</span><span>=</span><span>"server"</span>>
 <<span>/</span>HeaderTemplate>
 <ItemTemplate>
 <a <span>href</span><span>=</span><span>'view_mail.aspx?id=<%# ((System.Data.DataRowView)Container.DataItem)["ID"]%>'</span>>
 <% ((System.Data.DataRowView)Container.DataItem)["sender_name"] %>
 <<span>/</span>a> 
 <<span>/</span>ItemTemplate>
<<span>/</span>asp:TemplateColumn>