aleborgMedlem sedan jan. 20012 962 inlägg
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!
DinoMedlem sedan sep. 20011 918 inlägg
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');")
aleborgMedlem sedan jan. 20012 962 inlägg
Har testat det med, får samma fel!
DinoMedlem sedan sep. 20011 918 inlägg
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
renholmMedlem sedan apr. 20012 048 inlägg
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');");
}
aleborgMedlem sedan jan. 20012 962 inlägg
Tack renholm, det var if-satsen jag saknade!
renholmMedlem sedan apr. 20012 048 inlägg
Glöm inte att tacka Dino, faktiskt ca 1 minut före :)
aleborgMedlem sedan jan. 20012 962 inlägg
aleborgMedlem sedan jan. 20012 962 inlägg
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?
DinoMedlem sedan sep. 20011 918 inlägg
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]
}
aleborgMedlem sedan jan. 20012 962 inlägg
Jag vill alltså få in namnet här:
'Are you sure you want to delete "+ name+"?'
DinoMedlem sedan sep. 20011 918 inlägg
?
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] + "');");
}
aleborgMedlem sedan jan. 20012 962 inlägg
Provade det med men får felet:
(93): 'System.Web.UI.WebControls.DataGridItem.DataItem' denotes a 'property' where a 'method' was expected
DinoMedlem sedan sep. 20011 918 inlägg
Hmm, det funkar för mig, men testa detta då.
((DataRowView)e.Item.DataItem).Row.ItemArray[1].ToString();
aleborgMedlem sedan jan. 20012 962 inlägg
renholmMedlem sedan apr. 20012 048 inlägg
Tror det är så här
VB: e.Item.DataItem("name")
C#: e.Item.DataItem["name"]
aleborgMedlem sedan jan. 20012 962 inlägg
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'
renholmMedlem sedan apr. 20012 048 inlägg
Ops, är mer åt Dinos håll du ska gör :)
Testa detta då:
((DataRowView)e.Item.DataItem)["name"]
aleborgMedlem sedan jan. 20012 962 inlägg
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!)
DinoMedlem sedan sep. 20011 918 inlägg
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.