webForumDet fria alternativet

Problem med FindControl och ItemTemplate

3 svar · 432 visningar · startad av aleborg

aleborgMedlem sedan jan. 20013 341 inlägg
#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?

DinoMedlem sedan sep. 20011 914 inlägg
#2

Kanske behöver kolla template type.

if(e.Item.ItemType == ListItemType.Item)
{
   ...
}
emissionMedlem 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);
		}
	}
}
aleborgMedlem sedan jan. 20013 341 inlägg
#4

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

131 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)