在 GridTableView (RadGrid) 中查找标签
本文关键字:查找 标签 RadGrid GridTableView | 更新日期: 2023-09-27 18:30:58
我有一个分层的Telerik RadGrid,有时包含空的子条目。对于这些,我想用特定于用户区域设置的内容覆盖默认文本"没有要显示的子记录"。
所以我可以这样做:
<telerik:RadGrid ID ="SettingsGrid" ... />
<mastertableview ... />
<DetailTables>
<telerik:GridTableView ... />
<asp:Label ID="NoRecordLabel" runat="server" Text="whatever"/></div></NoRecordsTemplate>
这会导致文本"随便"在应该出现的时候出现。
但我显然想动态地做到这一点,但我在两个方面都失败了:
1) 通过在 .ascx 文件中引用我的 .resx 文件。我导入它的命名空间并引用某个资源:
Text="<%$ Resx:SiteTextResources.Globals_Close %>"
(这适用于同一解决方案中的其他文件)
但这只会产生空文本。
2)我还没有成功地以编程方式从后面的代码中检索标签。我看了这个:http://www.telerik.com/community/forums/aspnet-ajax/grid/how-to-access-controls-in-norecordstemplate.aspx 但没有让这种方法起作用,因为我似乎找不到标签。我得到一个OutOfBoundsException,我想这意味着GetItems()方法返回null。
有什么想法吗?将不胜感激!
请尝试使用以下代码片段。如果有任何疑虑,请告诉我。
.ASPX
<telerik:RadGrid ID="RadGrid1" runat="server" AutoGenerateColumns="false" OnNeedDataSource="RadGrid1_NeedDataSource"
OnItemDataBound="RadGrid1_ItemDataBound"
OnDetailTableDataBind="RadGrid1_DetailTableDataBind"
onprerender="RadGrid1_PreRender">
<MasterTableView CommandItemDisplay="Top" DataKeyNames="ID">
<Columns>
<telerik:GridBoundColumn DataField="ID" UniqueName="ID" HeaderText="ID">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="Name" UniqueName="Name" HeaderText="Name">
</telerik:GridBoundColumn>
<telerik:GridEditCommandColumn>
</telerik:GridEditCommandColumn>
</Columns>
<DetailTables>
<telerik:GridTableView Name="Child">
<NoRecordsTemplate>
<asp:Label ID="NoRecordLabel" runat="server" Text="whatever" />
</NoRecordsTemplate>
<Columns>
<telerik:GridBoundColumn DataField="ID" UniqueName="ID" HeaderText="ID">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="Name" UniqueName="Name" HeaderText="Name">
</telerik:GridBoundColumn>
</Columns>
</telerik:GridTableView>
</DetailTables>
</MasterTableView>
</telerik:RadGrid>
ASPX.CS
protected void RadGrid1_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
dynamic data1 = new[] {
new { ID = 1, Name ="Name_1",FileName = "jayesh.jpg"},
new { ID = 2, Name = "Name_2",FileName = "jayesh.jpg"},
new { ID = 3, Name = "Name_3",FileName = "jayesh.jpg"},
new { ID = 4, Name = "Name_4",FileName = "jayesh.jpg"},
new { ID = 5, Name = "Name_5",FileName = "jayesh.jpg"}
};
RadGrid1.DataSource = data1;
}
protected void RadGrid1_DetailTableDataBind(object sender, GridDetailTableDataBindEventArgs e)
{
e.DetailTableView.DataSource = new Object[0];
}
protected void RadGrid1_PreRender(object sender, EventArgs e)
{
foreach (GridDataItem item in RadGrid1.MasterTableView.Items)
{
if (item.HasChildItems && item.Expanded)
{
if (item.ChildItem.NestedTableViews[0].GetItems(GridItemType.NoRecordsItem).Count() > 0)
{
GridNoRecordsItem norecordItem = (GridNoRecordsItem)item.ChildItem.NestedTableViews[0].GetItems(GridItemType.NoRecordsItem)[0];
Label NoRecordLabel = (Label)norecordItem.FindControl("NoRecordLabel");
NoRecordLabel.Text = DateTime.Now.ToString();
}
}
}
}