DataList等控件嵌套绑定的一个需要注意的地方

        前两天刚刚搞定了DataList的嵌套绑定,结果今天用的时候就一直出问题,每次执行都找不到指定的控件,给我一个NULL的异常.(点这里看" DataList嵌套绑定数据")
       为什么找不到控件呢,使用的东西都一模一样.研究了好半天,才发现原来是一个 ListItemType的问题,上次我使用的时候,就直接用的 ItemTemplate,看代码,没有在 ItemTemplate之前再有其他的Template
Code
 1<asp:DataList ID="DataList1" runat="server" 
 2            Width="126px" onitemdatabound="DataList1_ItemDataBound">
 3            <ItemTemplate>
 4                <table style="width: 100%;">
 5                    <tr>
 6                        <td>
 7                            <asp:Label ID="Label1" runat="server" Text='<%# Eval("BookClassName") %>' 
 8                                Font-Bold="True" Font-Size="16pt" ForeColor="Red"></asp:Label>
 9                        </td>
10                    </tr>
11                    <tr>
12                        <td>
13                            <asp:DataList ID="DataList2" runat="server" RepeatColumns="2">
14                                <ItemTemplate>
15                                    <asp:Label ID="Label2" runat="server" Text='<%# Eval("BookClassName") %>'></asp:Label>
16                                </ItemTemplate>
17                            </asp:DataList>
18                        </td>
19                    </tr>
20                </table>
21            </ItemTemplate>
22        </asp:DataList>

所以就可以直接在代码中使用
protected   void  DataList1_ItemDataBound( object  sender, DataListItemEventArgs e)
    
{
        
string f = ((Label)e.Item.FindControl("Label1")).Text;
      //具体操作代码
}
结果今天用的时候,为什么总是有一个"NULL-----"异常呢,原来,我在datalist里面用了一下 HeaderTemplate,结果在 HeaderTemplate绑定数据完成时就去查找控件,这时候 ItemTemplate中的控件还没有加载,当然就找不到了.代码:
Code
 1 <asp:DataList ID="dlistOut" runat="server" OnItemDataBound="dlistOut_ItemDataBound">
 2            <HeaderTemplate>
 3                <asp:Label ID="Label20" runat="server" Text="三、简答题(每题" Font-Bold="True"></asp:Label>
 4                <%Response.Write(Session["QuestionScore"].ToString());%>
 5                <asp:Label ID="Label21" runat="server" Text="分)" Font-Bold="True"></asp:Label>
 6            </HeaderTemplate>
 7            <ItemTemplate>
 8                <table cellspacing="1" cellpadding="1" width="550" border="0" style="text-align: left">
 9                    <tr>
10                        <td colspan="2">
11                            <asp:Label ID="lblQNum" runat="server" Text='<%# Container.ItemIndex+1 %>' Font-Bold="True"></asp:Label>
12                            <asp:Label ID="lblQuestion" runat="server" Text='<%# Eval("QTitle","、{0}") %>' Width="273px"
13                                Font-Bold="False"></asp:Label>&nbsp;&nbsp;
14                            <asp:Label ID="lblQID" runat="server" Text='<%# Eval("QID") %>'></asp:Label>
15                        </td>
16                    </tr>
17                </table>
18            </ItemTemplate>
19        </asp:DataList>

所以要在DataList的绑定事件中加一个判断,判断一下是否是 ItemTemplate的绑定事件,重要的就是那个 ListItemType
1   protected   void  dlistOut_ItemDataBound( object  sender, DataListItemEventArgs e)
2      {
3        if(e.Item.ItemType==ListItemType.Item)
4        {
5             string qid = ((Label)e.Item.FindControl("lblQID")).Text;
6         //具体操作代码
7             }

8          }

在GridView中有点点不一样,应该用的是DataControlRowType
void  CustomersGridView_RowDataBound(Object sender, GridViewRowEventArgs e)
  
{
        
    
if(e.Row.RowType == DataControlRowType.DataRow)
    
{
      
// Display the company name in italics.
      e.Row.Cells[1].Text = "<i>" + e.Row.Cells[1].Text + "</i>";
        
    }
    
  }


转载于:https://www.cnblogs.com/zhangyue/archive/2008/06/03/1213051.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值