webForumDet fria alternativet
Logga in / Bli medlem

Javascript i datagrid

.NET

24 svar · 495 visningar · startad av aleborg

Medlem sedan jan. 20013 341 inlägg
Trådstart#1

Min datagrid ser ut så här:

<asp:datagrid id="TemplatesDG" runat="server" CssClass="table_600_Grey" AutoGenerateColumns="False" DataKeyField="admin_templateID">
	<HeaderStyle Font-Bold="True"></HeaderStyle>
	<Columns>
		<asp:HyperLinkColumn DataNavigateUrlField="admin_templateID" DataNavigateUrlFormatString="reseller_template_newdit.htm?id={0}" DataTextField="name" HeaderText="Name"></asp:HyperLinkColumn>
		<asp:TemplateColumn>
			<ItemStyle HorizontalAlign="Center" Width="20px"></ItemStyle>
			<ItemTemplate>
				<asp:ImageButton id="edit" runat="server" ImageUrl="images/edit.gif" CommandName="edit" AlternateText="Edit"></asp:ImageButton>
			</ItemTemplate>
		</asp:TemplateColumn>
		<asp:TemplateColumn>
			<ItemStyle HorizontalAlign="Center" Width="20px"></ItemStyle>
			<ItemTemplate>
				<asp:ImageButton ID="Delete" Runat="server" ImageUrl="images/delete.gif" CommandName="delete" AlternateText="Delete"></asp:ImageButton>
			</ItemTemplate>
		</asp:TemplateColumn>
	</Columns>
</asp:datagrid>

Och sen har jag följande kod:

		private void TemplatesDG_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
		{
			ImageButton delete = new ImageButton();
			delete = (ImageButton)TemplatesDG.FindControl("Delete");
			delete.Attributes.Add("onclick","return confirm('Weee');");
		}

men jag får felet:
System.NullReferenceException: Object reference not set to an instance of an object.
Line 83: delete.Attributes.Add("onclick","return confirm('Weee');");

vad gör jag fel??? Har provat flera olika sätt att göra detta på men får alltid fel attributet ska läggas till!

Medlem sedan sep. 20011 914 inlägg
#2

Detta skall funka, du får konvertera det till c#.

dim grr as ImageButton = e.Item.Cells(2).Controls.Item(1)
grr.Attributes.Add("onclick", "return confirm('Weee');")
Medlem sedan jan. 20013 341 inlägg
#3

Har testat det med, får samma fel!

Medlem sedan sep. 20011 914 inlägg
#4

Har nu testat efter din datagrid utseende och då funkar detta. Om det inte funkar för dig så vet jag inte vad som är fel.

If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then
   Dim grr As ImageButton = DirectCast(e.Item.Cells(2).Controls.Item(1), ImageButton) 'e.Item.FindControl("delete") skall funka det med
   grr.Attributes.Add("onclick", "javascript:alert('hej')")
End If
Medlem sedan apr. 20012 266 inlägg
#5

Detta borde funka (dock från huvudet med hjälp av ClassBrowsern)

if (e.Item.ItemType == ListItemType.Item)
{
	ImageButton delete = (ImageButton)e.Item.FindControl("Delete");
	delete.Attributes.Add("onclick","return confirm('Weee');");
}
Medlem sedan jan. 20013 341 inlägg
#6

Tack renholm, det var if-satsen jag saknade!

Medlem sedan apr. 20012 266 inlägg
#7

Glöm inte att tacka Dino, faktiskt ca 1 minut före :)

Medlem sedan jan. 20013 341 inlägg
#8

Tack Dino :D

Medlem sedan jan. 20013 341 inlägg
#9

Om jag vill vidareutveckla det här:

if(e.Item.ItemType == ListItemType.Item)
{
	ImageButton delete = (ImageButton)e.Item.FindControl("Delete");
	delete.Attributes.Add("onclick","return confirm('Are you sure you want to delete "+ name+"');");
}

och få in fältet "name" från databasen, hur gör jag då? Kan man lägga den i CommandArgument och hämta det därifrån?

Medlem sedan sep. 20011 914 inlägg
#10
if(e.Item.ItemType == ListItemType.Item)
{
   ImageButton delete = (ImageButton)e.Item.FindControl("Delete");
   delete.Attributes.Add("onclick","return confirm('Are you sure you want to delete "+ name+"');");
   [B]delete.CommandArgument = e.Item.DataItem("name")[/B]
}
Medlem sedan jan. 20013 341 inlägg
#11

Jag vill alltså få in namnet här:
'Are you sure you want to delete "+ name+"?'

Medlem sedan sep. 20011 914 inlägg
#12

?

if(e.Item.ItemType == ListItemType.Item)
{
   ImageButton delete = (ImageButton)e.Item.FindControl("Delete");
   delete.Attributes.Add("onclick","return confirm('Are you sure you want to delete "+ [B]e.Item.DataItem("name")[/B] + "');");
}
Medlem sedan jan. 20013 341 inlägg
#13

Provade det med men får felet:
(93): 'System.Web.UI.WebControls.DataGridItem.DataItem' denotes a 'property' where a 'method' was expected

Medlem sedan sep. 20011 914 inlägg
#14

Hmm, det funkar för mig, men testa detta då.

((DataRowView)e.Item.DataItem).Row.ItemArray[1].ToString();
Medlem sedan jan. 20013 341 inlägg
#15

Det funkade tack :D

Medlem sedan apr. 20012 266 inlägg
#16

Tror det är så här
VB: e.Item.DataItem("name")
C#: e.Item.DataItem["name"]

Medlem sedan jan. 20013 341 inlägg
#17

på Dinos kod får jag
System.NullReferenceException: Object reference not set to an instance of an object.
när jag klickar på ett objekt i datagriden
på e.Item.DataItem["name"] får jag:
Cannot apply indexing with [] to an expression of type 'object'

Medlem sedan apr. 20012 266 inlägg
#18

Ops, är mer åt Dinos håll du ska gör :)

Testa detta då:

((DataRowView)e.Item.DataItem)["name"]
Medlem sedan jan. 20013 341 inlägg
#19

får samma fel!
System.NullReferenceException: Object reference not set to an instance of an object.
delete.Attributes.Add("onclick","return confirm('Are you sure you want to delete "+((DataRowView)e.Item.DataItem)["name"]+"?');");

en annan sak mitt i allt, jag försöker kolla så att ett fält är ifyllt mha if(name.Value.Trim()==null) men den reagerar inte om fältet är tomt(helt annan sida ej att förknippa med ovanstående kod!)

Medlem sedan sep. 20011 914 inlägg
#20

1. Fick oxå det felmeddelandet i koden igår, väntade just på att du skulle ta upp det. Har inte riktigt kollat på det, men har för mig att det beror på att kontrollen inte klarade postbacken. Någon annan vet säkert bättre. :)

2. Använd validatorer.

266 ms totalt · 4 externa anrop · v20260731065814-full.c32e866c
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)