我有一个ASP.NET DataGrid,其中每个行对象都允许通过以下机制访问其数据:public object this[string fieldName] { get; }
。这意味着在XML中我需要做类似的事情并且不能只使用PropertyName。这个班级是第三方,所以我不能为它制作一个房产。是否有任何语法可以使这项工作?
<asp:DataGrid ID="test" runat="server" PageSize="25" AllowPaging="True" AutoGenerateColumns="False">
<Columns>
<asp:BoundColumn HeaderText="Test" DataField="this['iswhatiwanttodo']">
</asp:BoundColumn>
</Columns>
</asp:DataGrid>
答案 0 :(得分:2)
您可以使用BoundColumn
代替使用TemplateColumn
,而不是<asp:DataGrid ID="test" runat="server" PageSize="25" AllowPaging="True" AutoGenerateColumns="False" OnItemDataBound="test_ItemDataBound">
<Columns>
<asp:TemplateColumn HeaderText="Test">
<ItemTemplate>
<asp:Literal ID="litName" runat="server" />
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
。然后,您可以在列中放置标签,如下所示:
protected void test_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
Literal name;
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
name = (Literal)e.Item.FindControl("litName");
name.Text = [Grab Your Property Value Here];
}
}
你会注意到我还包括了事件&#34; OnItemDataBound&#34; - 它允许您在页面后面的代码中执行操作。从这里开始,您将要创建如下事件,您可以获得所需的任何属性,并将Literal的文本设置为您需要的内容。
{{1}}