导致';对象引用未设置为对象的实例';错误

本文关键字:实例 错误 对象 对象引用 导致 设置 | 更新日期: 2023-09-27 18:19:28

我有一个数据列表,我想重复项目,并为我正在处理的应用程序使用自动(行交替)颜色。我正试图在项目模板上方添加一个标题模板。

<table>
<asp:DataList ID="DataList1" runat="server" CellPadding="4" DataKeyField="num" DataSourceID="SqlDataSource1" ForeColor="#333333" OnItemDataBound="DataList1_ItemDataBound">
        <AlternatingItemStyle BackColor="White" />
        <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
        <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
        <ItemStyle BackColor="#EFF3FB" />
        <HeaderTemplate>
        <tr>
            <th>Item Name</th>
            <th>Item Type</th>
            <th>Item Price</th>
            <th>End(s) In</th>
        </tr>
        </HeaderTemplate>
        <ItemTemplate>
            <tr>
            <td><a class="rolls2" href="ItemView.aspx?ItemName=<%# Eval("ItemName") %>&num=<%# Eval("num") %>"><%# Eval("ItemName") %></a></td>
            <td><%# Eval("ItemType")%></td>
            <td>$ <%# Eval("ItemPrice")%></td>
            <td><asp:Label ID="lblExp" Text='<%# Bind("CreateDate") %>' runat="server" /></td>
            </tr>
        </ItemTemplate>
        <SelectedItemStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
    </asp:DataList>
<table>

当我运行这个代码时,我得到一个对象,它并没有被设置为对象的引用,它指向lblExp。如果删除标头,项目将成功运行。有没有其他方法可以简单地将Header添加到我的表中?

导致';对象引用未设置为对象的实例';错误

在没有看到代码的情况下很难对此进行诊断,但我猜您的DataList1_ItemDataBound方法试图在不首先检查e.Item.ItemType的情况下在e.Item中找到lblExp控件。

此事件将针对列表中的每个项目引发,包括标头,并且标头不包含名为lblExp的控件。

在处理项目之前,您需要检查ItemType

protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
{
   switch (e.Item.ItemType)
   {
      case ListItemType.Item:
      case ListItemType.AlternatingItem:
      case ListItemType.SelectedItem:
      case ListItemType.EditItem:
      {
         Label lblExp = (Label)e.Item.FindControl("lblExp");
         ...
      }
   }
}