webForumDet fria alternativet

Problem med FindControl och ItemTemplate

.NET

3 svar · 434 visningar · startad av aleborg

Medlem sedan jan. 20013 341 inlägg
Frågan#1

Jag har en Datagrid som heter DGUsers, i den finns:

<asp:TemplateColumn HeaderText="Read" ItemStyle-Width="50px">
	<ItemTemplate>
		<asp:CheckBoxList ID=chkRead Runat=server RepeatLayout="Flow" RepeatDirection="Horizontal" DataTextField='<%# DataBinder.Eval(Container.DataItem, "Read") %>' DataValueField='<%# DataBinder.Eval(Container.DataItem, "Read") %>' AutoPostBack="False">
			<asp:ListItem Value=""></asp:ListItem>
		</asp:CheckBoxList>
	</ItemTemplate>
</asp:TemplateColumn>

i cs har jag

		private void DGUsers_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
		{
			Response.Write(((CheckBoxList)e.Item.FindControl("chkRead")).DataValueField);
		}

men jag får felet System.NullReferenceException: Object reference not set to an instance of an object.
Det verkar som om chkRead inte kan hittas, vad har jag missat?

Medlem sedan sep. 20011 914 inlägg
#2

Kanske behöver kolla template type.

if(e.Item.ItemType == ListItemType.Item)
{
   ...
}
Medlem sedan dec. 19996 721 inlägg
#3

Du har missat att ItemDataBound körs även för Header etc.. Du måste kolla ItemType. Dessutom är det vettigt att använda typomvandling med "as", eftersom du kan testa om det blev rätt enkelt, och dessutom är det snabbare.

private void DGUsers_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
	if (e.Item.ItemType==ListItemType.Item || e.Item.ItemType==ListItemType.AlternatingItem)
	{
		CheckBoxList chkRead=e.Item.FindControl("chkRead") as CheckBoxList;
		if (chkRead!=null)
		{
			Response.Write(chkRead.DataValueField);
		}
	}
}
Medlem sedan jan. 20013 341 inlägg
#4

Tack!
Självklart har jag gjort det på alla andra ställen utom det här :r

259 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)