我正在使用Telerik的RadGrid,我希望能够将动态创建的列的DataTextField绑定到用作数据源的对象内的dictionary中的值。
我安排了一个班级:
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后端的透视表的radgrid视图。这是可能的,还是对DataTextField来说钻取字典项太多了?我在这里看到的大多数问题都与下拉列表有关,这不是我想要的。
最佳答案
我也有同样的问题。
我找到的将GridHyperLinkColumn的DataTextField绑定到字典值的唯一方法是在网格的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;
}
}
}
}
}
我希望这对你有用。