从网格视图中获取业务对象

时间:2010-06-22 07:59:13

标签: c# asp.net gridview business-objects

e.Row.DataItem究竟返回什么.. MSDN说.. 返回一个Object,表示GridViewRow对象绑定的基础数据对象。

这是我的DataGrid ......

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="ObjectDataSource1" OnRowDataBound="GridView1_RowDataBound">
        <Columns>
            <asp:BoundField DataField="PracticeCode" HeaderText="PracticeCode" SortExpression="PracticeCode" />
            <asp:BoundField DataField="AccountNo" HeaderText="AccountNo" SortExpression="AccountNo" />
            <asp:BoundField DataField="PatientName" HeaderText="PatientName" SortExpression="PatientName" />
            <asp:TemplateField HeaderText="Status">
                <ItemTemplate>
                    <asp:Label ID="LblStatus" runat="server"></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

我将它绑定到我的业务对象列表&lt;患者&gt; ..在DataBound行事件中,我试试这个......

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        Patient p1 = (Patient)e.Row.DataItem;
        Label lbl = e.Row.FindControl("LblStatus") as Label;

        if (p1 == null)
        {
            throw new Exception("P1 is null");
        }

        if (p1.OpenItems.Count > 0)
        {
            lbl.Text = "Has open Items";
        }
        else
        {
            lbl.Text = "";
        }
    }

我得到异常 P1为空 ...为什么如此......我错过了什么..

注意:可能有其他方法可以实现这一目标,但我特别关注为什么我的p1为空...并且有什么方法可以让患者绑定后从GridView返回对象。

1 个答案:

答案 0 :(得分:7)

也会为页眉和页脚调用RowDataBound,在调用DataRow之前,您需要确保当前处于实际e.Row.DataItem内:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {                
       if(e.Row.RowType != DataControlRowType.DataRow)
          return;

       Patient p1 = (Patient)e.Row.DataItem;