2013-09-04 3 views
2

Я работаю с RadGrid от Telerik, и я хотел бы иметь возможность привязывать DataTextField динамически созданного столбца к значению внутри словаря внутри объекта I ' м в качестве источника данных.Как привязать DataTextField к значению словаря с помощью ключа

У меня есть класс структурирована так:

public class MyClass 
{ 
    public AnObject ThisObject = null; 
    public Dictionary<int, ClassWithStuff> AnotherObject = new Dictionary<int, ClassWithStuff>(); 
} 

Я динамически создавать столбцы, и я хотел бы установить DataTextField столбца в чем-то вроде этого мода:

foreach (var item in ListOfPeople.OrderBy(r => r.FormattedName)) 
{ 
    var col = new GridHyperLinkColumn(); 
    rgGrid.MasterTableView.Columns.Add(col); 
    col.HeaderText = item.FormattedName; 
    col.NavigateUrl = string.Format("~/Person.aspx?id={0}", item.OID); 
    col.UniqueName = item.OID.ToString(); 
    col.DataTextField = "AnotherObject[" + item.OID + "].Person.FormattedName"; 
} 

Если источник данных был настроен на список объектов MyClass и когда этот словарь заполнен, в качестве словарного ключа используется OID.

Это в основном радарный вид сводной таблицы с бэкэндом MySQL. Возможно ли это, или сверление в элемент словаря слишком много для DataTextField? Большинство вопросов, которые я вижу здесь, связаны с раскрывающимися списками, и это не то, что я пытаюсь сделать.

ответ

0

У меня была точно такая же проблема.

Единственный способ, который я нашел для связывания DataTextField из GridHyperLinkColumn в словаре значения находится на ItemDataBound события сетки.

Следующий пример основан на вашей структуре образца:

... 
// set temporary the ID as a text 
col.Text = item.OID.ToString(); 
YourGrid.ItemDataBound += OnYourGridItemBound; 
... 
private static void OnYourGridItemBound(object sender, Telerik.Web.UI.GridItemEventArgs e) 
{ 
    GridDataItem dataBoundItem = e.Item as GridDataItem; 
    if (dataBoundItem != null) 
    { 
     foreach (TableCell cell in dataBoundItem.Cells) 
     { 
      if (cell.Controls.Count > 0) 
      { 
       var link = cell.Controls[0] as HyperLink; 
       if (link != null) 
       { 
        var dataItem = dataBoundItem.DataItem as MyClass; 
        var id = link.Text; 
        link.Text =          
         dataItem.AnotherObject[id].Person.FormattedName; 
       } 
      } 
     } 
    } 
} 

Я надеюсь, что это будет работать для вас.

Смежные вопросы