Hej! Inte säker på att jag har förstått din fråga riktigt rätt men om det är så att du har en Button för delete av användare i din datagrid och vill få upp ett Confirm-fönster (alltså JavaScript) så kan du göra så här: Japp det är det... Skall kolla på, måste bara omvandla den till C# först.. ok jag har översatt det (tror jag) Nja det funkar som så att funktionen du fick från mig kommer att lägga till ett OnClick-anrop på Delete knapparna i din DataGrid. Om användaren klickar Yes så kommer sidan postas om och din EditCompany körs, om den är kopplad till nåt event på DataGriden, exempelvis ItemCommand? Om användaren svara No så händer inget mer än att popupen stängs igen, och sidan laddas alltså inte om. Ok...Då hänger jag med... vad kommer DirectCast ifrån. Är det en metod som finns i framework eller vad är det? Ah, my bad, verkar vara en VB-grej bara. (http://www.codeproject.com/dotnet/CheatSheetCastingNET.asp) Hmm... I foreach:en så är det inte varje länk (lnk) utan varje DataGridItem (itm)du ska kolla, testa det här istället. Ok.. Nu får jag inga felmmedelande men metoden aktiveras inte när jag klickar på Delete länken i DataGriden. Vad menar du med metoden i det här fallet? Dyker inte popupen upp eller anropas inte EditCompany? DeleteCommand anropas, men det kommer inte upp en popUp Har din Button id=Delete? Om du gör en "view source", kan du se om det "sitter" nåt onclick-event på din delete-knapp? Har du debuggat igenom sidan och sett att den går in i funktionen OnPreRender? Några punkter att kolla på kanske. Här kommer all kod jag tror du behöver. Aha... Du kör en Button-kolumn, vet inte varför egentligen men jag brukar inte använda såna särskilt mkt... För insnöad på hur jag brukar göra så jag tänkte inte på att det finns andra sätt än mitt sätt :-) Eventuellt måste du göra om den kolumnen till en TemplateColumn för att min lösning ska kunna funka... Ok...Messagebox när jag klickar på delete i en DataGrid
jo i datagriden kan du aktivera en delete funktion vilket jag använder. Och jag vill nu att användaren skall få en fråga om han vill radera posten. Allts en YES och NO MessageBox. OCh jag måste kunna fånga upp vad användaren klickar på för att kunna styra honom rätt.
Hur gör man det i från CodeBehind
Alltså jag använder mig av metoden i datagriden
<code>
public void EditCompany(object sender, DataGridCommandEventArgs e)
</code>
/TyronneSv: Messagebox när jag klickar på delete i en DataGrid
Protected Overrides Sub OnPreRender(ByVal e As System.EventArgs)
MyBase.OnPreRender(e)
Dim lnk As LinkButton
Dim itm As DataGridItem
For Each itm In DataGrid1.Items
lnk = DirectCast(itm.FindControl("lnkDelete"), LinkButton)
If Not lnk Is Nothing Then lnk.Attributes.Add("onclick", "return window.confirm('Are you sure that you want to delete this item?')")
Next
End Sub
Koden gäller som du ser LinkButtons men jag tror det funkar på liknande sätt med en Button. Det här triggar ju ingen postback alls om användaren väljer No så det kanske inte riktigt är så som du tänkt dig eller?Sv:Messagebox när jag klickar på delete i en DataGrid
Men jag återkommer
/TyronneSv: Messagebox när jag klickar på delete i en DataGrid
<code>
protected override void OnPreRender(System.EventArgs e)
{
MyBase.OnPreRender(e);
DataGridItem itm ;
foreach(LinkButton lnk in dbgListAll.Item)
{
lnk = DirectCast(itm.FindControl("lnkDelete"), LinkButton);
if (lnk == "" )
{
lnk.Attributes.Add("onclick", "return window.confirm('Are you sure that you want to delete this item?')") ;
}
}
}
</code>
Min fråga hur kommer nu detta att fungera. Eller kan jag flytta in delar av det i min
<code>
public void EditCompany(object sender, DataGridCommandEventArgs e)
{
// Hämtar idnumret på användaren och gör om den till en Guid
Guid CompanyID = new Guid(dbgListAll.DataKeys[e.Item.ItemIndex].ToString());
Cache["ConnectID"] = CompanyID;
// Omdirigerar till att kunna skapa nytt företag
Response.Redirect("Company.aspx?SaveValue=1");
}
</code>
För det är i denna metoden som jag kallar på delete metoden
/TyronneSv:Messagebox när jag klickar på delete i en DataGrid
Funktionen ska inte läggas in i nån annan funktion som du har utan den ska vara en helt fristående funktion i din aspx.cs fil.
En kommentar bara, var ett tag sen jag programmerade C# men jag undrar lite om det räcker med att göra
<code>
if (lnk == "" )
</code>
tror du kanske får kolla så att lnk inte är Null istället för ""?
Dessutom ska det vara Not lnk == "" eller lnk != "", alltså om "inte lnk är tom" så ska du lägga till attributet på knappen.Sv: Messagebox när jag klickar på delete i en DataGrid
angående sista har du nog rätt.... Skall ordna det
/TyronneSv:Messagebox när jag klickar på delete i en DataGrid
Sv: Messagebox när jag klickar på delete i en DataGrid
Testa istället nåt i stil med (list osäker på casting i C#):
<code>
lnk = (LinkButton)itm.FindControl("lnkDelete");
</code>Sv:Messagebox när jag klickar på delete i en DataGrid
nu ser min kod ut så här
<code>
protected override void OnPreRender(System.EventArgs e)
{
base.OnPreRender(e);
DataGridItem itm ;
LinkButton lnk;
foreach(lnk in dbgListAll.Items)
{
lnk = (LinkButton)itm.FindControl("Delete");
if (lnk != null )
{
lnk.Attributes.Add("onclick", "return window.confirm('Are you sure that you want to delete this item?')") ;
}
}
}
</code>
Och systemet gnäller för c:\inetpub\wwwroot\WebClient\Admin\CompanyList.aspx.cs(272): Type and identifier are both required in a foreach statement. dvs att
foreach(lnk in dbgListAll.Items)
dvs lnk inte är deklarerad, Men gör jag det så gnäller den på
LinkButton lnk;
att den redan ärt deklarerad.
några förslag
/TyronneSv: Messagebox när jag klickar på delete i en DataGrid
<code>
protected override void OnPreRender(System.EventArgs e)
{
base.OnPreRender(e);
LinkButton lnk;
foreach(DataGridItem itm in dbgListAll.Items)
{
lnk = (LinkButton)itm.FindControl("Delete");
if (lnk != null )
{
lnk.Attributes.Add("onclick", "return window.confirm('Are you sure that you want to delete this item?')") ;
}
}
}
</code>Sv:Messagebox när jag klickar på delete i en DataGrid
/TyronneSv: Messagebox när jag klickar på delete i en DataGrid
Sv:Messagebox när jag klickar på delete i en DataGrid
Allstå denna eventhanteraren skall altså känna av att jag klickar på DeleteKnappen i dataGriden, jag skall inte kalla på den för att den skall hojat igång?
/TyronneSv: Messagebox när jag klickar på delete i en DataGrid
Skicka gärna din DataGrid-kod också så kan vi kolla på det.Sv:Messagebox när jag klickar på delete i en DataGrid
<code>
/// <summary>
/// Raderar en koppling
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void DeleteCompany(object sender,DataGridCommandEventArgs e)
{
// Hämtar idnumret från Gridden och gör om den till en Guid
Guid NewId = new Guid(dbgListAll.DataKeys[e.Item.ItemIndex].ToString());
DataBind();
// Kallar på metod i Cuser-klassen
Pagelogic.CCompany obj = new Pagelogic.CCompany();
//Returenrar om det gick bra
int resultValue = obj.DeleteFromDatabaseCon(NewId);
// Meddelande visas beroende på reultat
if (resultValue == -1)
lblMessage.Text ="Kopplingen är borttagen";
}
</code>
<code>
protected override void OnPreRender(System.EventArgs e)
{
base.OnPreRender(e);
LinkButton lnk;
foreach(DataGridItem itm in dbgListAll.Items)
{
lnk = (LinkButton)itm.FindControl("Delete");
if (lnk != null )
{
lnk.Attributes.Add("onclick", "return window.confirm('Are you sure that you want to delete this item?')") ;
}
}
}
</code>
<code>
<asp:DataGrid id="dbgListAll" runat="server" Width="541px" Font-Size="9pt" Font-Names="Verdana"
BackColor="White" DataKeyField="ConnectID" BorderColor="#E7E7FF" BorderStyle="None" BorderWidth="1px"
CellPadding="3" GridLines="Horizontal" AutoGenerateColumns="False" AllowPaging="True" OnEditCommand="EditCompany"
OnDeleteCommand="DeleteCompany" AllowSorting="True" HorizontalAlign="Center">
<SelectedItemStyle Font-Size="9pt" Font-Names="Verdana" Font-Bold="True" ForeColor="#F7F7F7" BackColor="#738A9C"></SelectedItemStyle>
<EditItemStyle Font-Size="9pt" Font-Names="Verdana" Font-Bold="True"></EditItemStyle>
<AlternatingItemStyle Font-Size="9pt" Font-Names="Verdana" BackColor="#F7F7F7"></AlternatingItemStyle>
<ItemStyle Font-Size="9pt" Font-Names="Verdana" ForeColor="#4A3C8C" BackColor="#E7E7FF"></ItemStyle>
<HeaderStyle Font-Size="Smaller" Font-Names="Verdana" Font-Bold="True" ForeColor="#F7F7F7" BackColor="#405368"></HeaderStyle>
<FooterStyle ForeColor="#4A3C8C" BackColor="#B5C7DE"></FooterStyle>
<Columns>
<asp:BoundColumn DataField="Company" HeaderText="Företag">
<HeaderStyle Width="150px"></HeaderStyle>
<ItemStyle Font-Size="8pt" Font-Names="Verdana" HorizontalAlign="Left"></ItemStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="Region" HeaderText="Region">
<HeaderStyle Width="150px"></HeaderStyle>
<ItemStyle Font-Size="8pt" Font-Names="Verdana" HorizontalAlign="Left"></ItemStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="productCategory" HeaderText="Branch" DataFormatString="{0:C}">
<HeaderStyle HorizontalAlign="Left" Width="150px"></HeaderStyle>
<ItemStyle Font-Size="8pt" Font-Names="Verdana" HorizontalAlign="Left"></ItemStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="PlaceName" HeaderText="Stad">
<HeaderStyle Width="150px"></HeaderStyle>
<ItemStyle Font-Size="8pt" Font-Names="Verdana"></ItemStyle>
</asp:BoundColumn>
<asp:ButtonColumn Text="<img border=0 alt='Editera koppling' src=Images/imgEdit.gif>" CommandName="Edit">
<HeaderStyle Width="40px"></HeaderStyle>
<ItemStyle Font-Size="9pt" Font-Names="Verdana"></ItemStyle>
</asp:ButtonColumn>
<asp:ButtonColumn Text="<img border=0 alt='Radera koppling' src=Images/imgDelete.gif>" CommandName="Delete">
<HeaderStyle Width="40px"></HeaderStyle>
<ItemStyle Font-Size="9pt" Font-Names="Verdana"></ItemStyle>
</asp:ButtonColumn>
</Columns>
<PagerStyle Font-Size="Smaller" Font-Names="Verdana" HorizontalAlign="Right" ForeColor="#4A3C8C"
BackColor="DarkGray" Mode="NumericPages"></PagerStyle>
</asp:DataGrid>
</code>
Hoppas du hittar något
/tyronneSv: Messagebox när jag klickar på delete i en DataGrid
Alltså jag skulle byta din
<code>
<asp:ButtonColumn Text="<img border=0 alt='Radera koppling' src=Images/imgDelete.gif>" CommandName="Delete">
<HeaderStyle Width="40px"></HeaderStyle>
<ItemStyle Font-Size="9pt" Font-Names="Verdana"></ItemStyle>
</asp:ButtonColumn>
</code>
Mot nåt i stil med:
<code>
<asp:TemplateColumn>
<ItemTemplate>
<asp:linkbutton id="Delete" runat="server" Commandname="Delete">
<img border="0" alt="Radera koppling" src="Images/imgDelete.gif"></asp:linkbutton>
</ItemTemplate>
<HeaderStyle Width="40px"></HeaderStyle>
<ItemStyle Font-Size="9pt" Font-Names="Verdana"></ItemStyle>
</asp:TemplateColumn>
</code>
Testade lite här och fick det att funka iaf. The story continues :-)Sv:Messagebox när jag klickar på delete i en DataGrid
Skall testa detta återkommer
/Tyronne