如何使用键将DataTextField绑定到字典值

本文关键字:字典 绑定 DataTextField 何使用 | 更新日期: 2023-09-27 18:30:03

我正在使用Telerik的RadGrid,我希望能够将动态创建的列的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后端的透视表的radgrid视图。这可能吗?或者对DataTextField来说,钻取字典项太多了吗?我在这里看到的大多数问题都与下拉列表有关,这不是我想要尝试的。

如何使用键将DataTextField绑定到字典值

我遇到了完全相同的问题。

我找到的将GridHyperLinkColumnDataTextField绑定到字典值的唯一方法是在网格的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;
                }
            }
        }
    }
}

我希望这对你有用。