在RadGrid_ItemDataBound事件中访问dataitem值(dataItem ["列"]。文本始终为空)

时间:2015-05-22 13:23:50

标签: c# webforms telerik telerik-grid radgrid

我有一个场景,其中有一个项目模板,其中包含2个控件(标签和超链接)。根据我要隐藏/显示标签/超链接的数据类型。在研究甚至在Telerik网站上查找文档之后,这里是我想出来的,我的.Text属性总是一个空字符串,所以我不知道我做错了什么。

下面是我如何使用硬编码的DataTable绑定网格。第一行中的MARK列显然有一个值" MARK"所以我不知道为什么.Text总是空的。

protected void gridStudentGrade_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
    //X axis column: "STUDENT"
    //Y axis column: "COURSE"
    //Z axis column: "GRADE"

    DataTable table = new DataTable();
    table.Columns.Add("Course", typeof(string));
    table.Columns.Add("Student1", typeof(string));
    table.Columns.Add("Student2", typeof(string));
    table.Columns.Add("Student3", typeof(string));

    table.Rows.Add("", "MARK", "BRIAN", "ALEX");
    table.Rows.Add("MATH", 80, 95, 70);
    table.Rows.Add("SCIENCE", 55, 80, 72);
    table.Rows.Add("ENGLISH", 70, 85, 65);

    (sender as RadGrid).DataSource = table;
}


protected void gridStudentGrade_ItemDataBound(object sender, GridItemEventArgs e)
{
    if (e.Item is GridDataItem)
    {
        GridDataItem item = (GridDataItem)e.Item;

        Label label1 = item.FindControl("label1") as Label;
        HyperLink hyperlink1 = item.FindControl("hyperlink1") as HyperLink;


        string student1= item["Student1"].Text;

        if (student1 == "MARK")
        {
            label1.Visible = true;
            hyperlink1.Visible = false;
        }
        else
        {
            label1.Visible = false;
            hyperlink1.Visible = true;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您展示的代码看起来很好。但是,您需要确保AutoGenerateColumns RadGrid属性设置为true。所以网格的标记看起来像:

<telerik:RadGrid ID="gridStudentGrade" runat="server" 
    OnNeedDataSource="GridItems_NeedDataSource"
    OnItemDataBound="gridStudentGrade_ItemDataBound">
    AutoGenerateColumns="true"
</telerik:RadGrid>