【问题标题】:C# telerik grid cell value from template column来自模板列的 C# Telerik 网格单元格值
【发布时间】:2011-05-09 21:29:13
【问题描述】:

我有一个这样定义的网格模板列(为了节省时间和空间,我只放置列):

<telerik:GridTemplateColumn HeaderText="Id" Reorderable="true" SortExpression="Id" UniqueName="Id" DataField="Id">
                    <ItemTemplate>
                        <asp:Label ID="lblId" runat="server" Text='<%# Eval("Id") %>' />
                    </ItemTemplate>
                    <EditItemTemplate>
                        <telerik:RadTextBox ID="txbId" Width="50px" runat="server" TextMode="SingleLine"
                            Text='<%# Bind("Id") %>' />
                    </EditItemTemplate>
                    <ItemStyle VerticalAlign="Top" />
             </telerik:GridTemplateColumn>

我想在 PreRender 事件上,提取此列的值

protected void RadGrid1_PreRender(object sender, System.EventArgs e)
    {
        //string selectedItem = ((GridDataItem)RadGrid1.SelectedItems[0])["Id"].Text;
        foreach (GridDataItem item in RadGrid1.Items)
        {
            //not working
            string k = item["Id"].Text;// is empty string 
            string key = (item["Id"].TemplateControl.FindControl("lblId") as RadTextBox).Text;// null pointer
}

知道怎么解决吗?

非常感谢。

【问题讨论】:

  • 您能否在期间数据绑定中执行此操作,以便在绑定时访问每个项目?
  • 我会尝试,但如果能在 prerender 上使用它会很好,因为我需要根据 DB 中的值更改某些列的工具提示,这只能在 prerender 上实现!?当我尝试使用模板列时会出现复杂情况:/

标签: c# telerik-grid


【解决方案1】:

看来解决方法比较简单,在telerik论坛回复:

foreach (GridDataItem item in grdHeader.EditItems)
            {
                // if in editing mode
                GridEditableItem edititem = (GridEditableItem)item.EditFormItem;
                RadTextBox txtHeaderName = (RadTextBox)edititem.FindControl("txbId");
                //otherwise
                Label lbl= (Label)edititem.FindControl("lblId");
                string id = lbl.Text;
            }

【讨论】:

    【解决方案2】:

    我可能弄错了(因为我对 Telerik 控件套件不是很熟悉),但通常情况下,数据绑定事件在控件的 PreRender 事件之后才会发生。您必须更早地进行 DataBind,或者将您的逻辑移到 page life cycle 的后面。

    【讨论】:

    • 不,数据绑定已经完成!因为如果列是正常绑定的,比如不使用模板,我可以使用 item["Id"].Text 访问它
    • item["Id"] 到底应该给你什么?我只看到 lblId 和 txbId,如果你不编辑,txbId 应该不存在。
    • 抱歉这么晚才回复 :)... item["Id"] 应该给我网格中每个项目的唯一 ID。确切地说,txbId 是一个不好的例子,因为我没有编辑,所以我会编辑帖子!但是应该有一种方法可以在 OnPreRender 事件中访问该单元
    • 有趣...不知道为什么它不可用,只要 GridDataItem 有“Id”。您能否遍历行本身并获取单元格,而不是尝试使用 RadGrid.Items?
    • 我希望我知道如何,因为单元格在模板列中:) 无论如何,我在 Telerik 论坛上发布了这个,所以他们可能应该知道,但仍然没有答案。如果我能从他们那里得到反馈,我也会在这里发布。非常感谢。
    【解决方案3】:

    试试

    foreach (GridDataItem item in RadGrid1.Items)
        {
            if(item.ItemType == GridItemType.Item ||
                        item.ItemType ==   GridItemType.AlternatingItem)
            {
                string k = item["Id"].Text;// is empty string 
                ...
    

    【讨论】:

    • 不,仍然是空字符串。感谢您的努力:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多