如何将gridview列绑定到子类值?

时间:2009-03-09 20:51:52

标签: asp.net gridview

我有一个ASP.net gridview,我正在尝试绑定。我的DataSource有一个集合,我绑定的2列是子类的一部分。我的DataSource有一个名为Staff的子类,其中包含人员信息。 boundfields SurveyID和NumberOfExceptions绑定正常,但Staff.Name和Staff.Office无法绑定。

asp:BoundField DataField="SurveyID" HeaderText="ID" ...
asp:BoundField DataField="Staff.Name" HeaderText="Name" ...
asp:BoundField DataField="Staff.Office" HeaderText="Office" ...
asp:BoundField DataField="NumberOfExceptions" HeaderText="Exceptions" ...

背后的代码是:

uxSurveyGrid.DataSource = searchResults;
uxSurveyGrid.DataBind();

如果我在后面的代码中键入searchResults[0].Staff.Name,我可以看到该值,为什么运行时无法在gridview中评估Staff.Name?

如何将列绑定到子类值?我是否必须在代码隐藏中执行此操作?

任何帮助将不胜感激,

标记。

4 个答案:

答案 0 :(得分:8)

我相信你可以使用Template字段和标记scriptlet来实现这一点......

    <asp:TemplateField>
        <ItemTemplate>
            <asp:Label Id="lblSubclassVal" runat="server" Text="<%# DataBinder.Eval(Container.DataItem, "SubClass.PropertyName")%>"></asp:Label>
        </ItemTemplate>
    </asp:TemplateField>

答案 1 :(得分:6)

ASP.NET GridView背后的数据绑定机制仅支持一个级别绑定。 (与在绑定到DataSet / DataTable / DataView的情况下支持多级的WinForms Binding对应物相反)。

您有三种可能的解决方案:

  1. 处理每行的ItemDataBound事件
  2. 使用公开子对象属性的属性扩展根级实体,并将这些属性用于绑定表达式
  3. 您可以使用模板字段代替使用BoundField,并使用&lt;%=%&gt;生成内容。访问数据项的表达式。

答案 2 :(得分:0)

标记,

我99.9%肯定你必须在单个行的ItemDataBound事件的代码隐藏中处理这个问题。

请记住,您可以从e.Item.DataItem

获取整个数据库对象

答案 3 :(得分:0)

BoundField不支持[Name]。[Name]语法。只有简单的属性名称。