DataList等控件嵌套绑定的一个需要注意的地方
前两天刚刚搞定了DataList的嵌套绑定,结果今天用的时候就一直出问题,每次执行都找不到指定的控件,给我一个NULL的异常.(点这里看"DataList嵌套绑定数据")
为什么找不到控件呢,使用的东西都一模一样.研究了好半天,才发现原来是一个ListItemType的问题,上次我使用的时候,就直接用的ItemTemplate,看代码,没有在ItemTemplate之前再有其他的Template
所以就可以直接在代码中使用
所以要在DataList的绑定事件中加一个判断,判断一下是否是ItemTemplate的绑定事件,重要的就是那个ListItemType
在GridView中有点点不一样,应该用的是DataControlRowType
为什么找不到控件呢,使用的东西都一模一样.研究了好半天,才发现原来是一个ListItemType的问题,上次我使用的时候,就直接用的ItemTemplate,看代码,没有在ItemTemplate之前再有其他的Template
Code
所以就可以直接在代码中使用
protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
{
string f = ((Label)e.Item.FindControl("Label1")).Text;
//具体操作代码
}
结果今天用的时候,为什么总是有一个"NULL-----"异常呢,原来,我在datalist里面用了一下HeaderTemplate,结果在HeaderTemplate绑定数据完成时就去查找控件,这时候ItemTemplate中的控件还没有加载,当然就找不到了.代码:{
string f = ((Label)e.Item.FindControl("Label1")).Text;
//具体操作代码
}
Code
所以要在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 }
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>";
}
}
{
if(e.Row.RowType == DataControlRowType.DataRow)
{
// Display the company name in italics.
e.Row.Cells[1].Text = "<i>" + e.Row.Cells[1].Text + "</i>";
}
}