c#从模板列中teleerik网格单元格值
本文关键字:teleerik 网格 单元格 | 更新日期: 2023-09-27 17:55:02
我有一个像这样定义的grid-template-column(为了节省时间和空间,我将只放置列):
<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
}
有什么好办法吗?
解决办法似乎很简单,在teleerik论坛上回应道:
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;
}
我可能搞错了(因为我不是很熟悉Telerik控件套件),但通常情况下,数据绑定事件直到控件的PreRender事件之后才发生。您必须更早地进行数据绑定,或者将逻辑移到页面生命周期的后期。
Try
foreach (GridDataItem item in RadGrid1.Items)
{
if(item.ItemType == GridItemType.Item ||
item.ItemType == GridItemType.AlternatingItem)
{
string k = item["Id"].Text;// is empty string
...