星期日, 7月 12, 2009

DataList裡FindControl


參考文章:
請問ItemDataBound是什麼意思
你有用 FindControl 時找不到 Control (控制項) 的經驗嗎
[ASP.NET]Page.FindControl
遞迴方式的 FindControl (進階版)
ASP.NET問題解決,書中第4-18


發生問題:


並未將物件參考設定為物件的執行個體
描述: 在執行目前 Web 要求的過程中發生未處理的例外情形。請檢閱堆疊追蹤以取得錯誤的詳細資訊,以及在程式碼中產生的位置。

例外詳細資訊: System.NullReferenceException: 並未將物件參考設定為物件的執行個體

原始程式錯誤:

可能原因:

原來寫法如下:
//以下為隱藏部分的文章

protected void ChgLvl(object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item ||
e.Item.ItemType == ListItemType.AlternatingItem)
{
Label temp = Page.FindControl("user_levelLabel") as Label;
switch (temp.Text)
{
case "1":
temp.Text = "關懷員";
break;
case "2":
temp.Text = "資料輸入人員";
break;
case "3":
temp.Text = "1級主管";
break;
case "4":
temp.Text = "2級主管";
break;
case "5":
temp.Text = "管理員";
break;
}
}
}

解法方法:


修改為以下寫法

protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
{
//
if (e.Item.ItemType == ListItemType.Item ||
e.Item.ItemType == ListItemType.AlternatingItem)
{
//原來寫法為
//Label temp = Page.FindControl("user_levelLabel") as Label;
//改為來取得控制項
Label lbl = e.Item.FindControl("user_levelLabel") as Label;

switch (lbl.Text)
{
case "1":
lbl.Text = "關懷員";
break;
case "2":
lbl.Text = "資料輸入人員";
break;
case "3":
lbl.Text = "1級主管";
break;
case "4":
lbl.Text = "2級主管";
break;
case "5":
lbl.Text = "管理員";
break;
}

}
}


沒有留言:

Analytics