【问题标题】:ASP.NET DataGrid BoundColumnASP.NET DataGrid BoundColumn
【发布时间】:2014-07-26 20:56:03
【问题描述】:
我有一个 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>
【问题讨论】:
标签:
c#
asp.net
.net
datagrid
boundcolumn
【解决方案1】:
您可以使用TemplateColumn,而不是使用BoundColumn。然后,您可以像这样在列中放置一个标签:
<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>
您会注意到我还包含了事件“OnItemDataBound” - 它允许您在页面的代码中执行操作。从这里,您将要创建一个事件,如下所示,您可以获取所需的任何属性并将 Literal 的文本设置为您需要的内容。
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];
}
}