Försöker att skapa en kolumn i en datagrid, kolumnen ska innehålla en bildknapp. När man klickar på bilden så ska vissa händelser ske, hade tänkt någon sorts "imagebutton_click()", men jag får det inte riktigt att fungera:
När knappen ligger i en datagrid är det lättast att använda "eventet" ItemCommand för DataGriden. För att kunna urskilja vad för kommando som har utförts sätter du ett lämpligt CommandName på din ImageButton som du sedan kontrollerar i din funktion som tar hand om ItemCommand eventet. Hoppas du förstod
ger mig felet(när jag försöker växla från html till design)
Could not open in Design view. Quote values differently inside a '<%...value..%>' block.
Om jag tar bort det och sätter ett fast värde så uppdateras inte Label1 när jag klickar!
Om du kör med TemplatesDG.SelectedIndex kommer endast det värde som finns på den rad som är markerad som SelectedItem att visas, så e.Item.ItemIndex borde funka för alla rader oavsett vilken som är markerad som SelectedItem
Man angående att inget händer så beror det troligen på att du inte har bundit ItemCommand eventet.
För att verkligen kontrollera att något händer i ItemCommand kan du lägga in en Response.Write("Bo!")
Mystiskt, ser inte riktigt vad som skulle kunna vara fel, angående att HyperLinkColumn fungerar så beror det väl på att det är en "riktig" länk som inte kontrolleras av ASP.NET efter man klickat på den,
Denna kod fungerar för mig
private Business.Node node;
protected System.Web.UI.WebControls.DataGrid dgNodes;
private void Page_Load(object sender, System.EventArgs e)
{
node = new Business.Node(int.Parse(Request.QueryString["nid"]), true);
if (!Renholm.Omega.Security.Business.Account.HasAccess(node.Admins))
throw new System.Security.SecurityException("Access Denied");
if (!Page.IsPostBack)
{
BindData();
}
}
private void BindData()
{
dgNodes.DataSource = node.Children;
dgNodes.DataBind();
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.dgNodes.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dgNodes_ItemCommand);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void dgNodes_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
switch(e.CommandName)
{
case "Up":
node.Children[e.Item.ItemIndex].Order += -3;
node.Children.Sort();
node.Children.Save();
break;
case "Down":
node.Children[e.Item.ItemIndex].Order += 3;
node.Children.Sort();
node.Children.Save();
break;
case "Delete":
node.Children[e.Item.ItemIndex].Delete();
Response.Redirect(Request.RawUrl);
break;
}
Response.Redirect(Request.RawUrl);
}
Kom på en till sak, din databind sker även vid postback vilket är oftast onödigt då ViewState är aktiverat. Lägg din kod som hämtar och binder datan i en if (!Page.IsPostBack).
267 ms totalt · 4 externa anrop · v20260731065814-full.c32e866c