Ako na mazanie položiek GridView s efektným JavaScriptovým potvrdením
Kategória: .NET, C#, publikované: 15.02.2010, autor: Igor Kulman
Ak používate v komponente GridView na mazanie položiek štandardnú funkcionalitu,isto vás už napadlo, pridať na tlačidlo Zmazať nejaký potvrdzovací dialóg, aby nedochádzalo k nechceným zmazaniam položiek.
Najjednoduchším riešením je využiť základné možnosti JavaScriptu.
<asp:GridView ID="GridView1" runat="server" DataKeyNames="id" DataSourceID="InvoicesDS" OnRowDataBound="GridView1_RowDataBound"> <Columns> ... <asp:TemplateField ShowHeader="False"> <ItemTemplate> <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Delete" OnClientClick='return confirm("Naozaj chcete zmazať túto položku?");' Text="Zmazať" /> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView>
Takýto štandardný potvrdzovací dialóg však nevyzerá vôbec dobre, nie je možné upraviť jeho vzhľad, titulok okna a ani názvy tlačidiel. Oveľa lepší výsledok je možné dosiahnuť pomocou jQuery Impormtu, je to však trochu komplikovanejšie.
Najprv je potrebné do hlavičky vložiť odkaz na css a js od jQuery Impromptu
<script src="/Scripts/jquery-impromptu.2.6.min.js" type="text/javascript"></script> <link href="/css/impromptu.css" rel="stylesheet" type="text/css" />
a pomocnú funkciu
function confirmDeleteResult(v, m, f) { if (v) $('#' + f.hidID).click(); }
V definícií GridView zameníme štandardné tlačidlo na zmazanie záznamu na skryté tlačidlo,ktoré vykoná skutočné zmazanie a odkaz,ktorý sa bude zobrazovať
<asp:GridView ID="GridView1" runat="server" DataKeyNames="id" DataSourceID="InvoicesDS" OnRowDataBound="GridView1_RowDataBound"> <Columns> ... <asp:TemplateField> <ItemTemplate> <a id="linkDelete" runat="server" href="#" title="<%$ Resources: Default, Delete %>"><asp:Image ID="Imagecasas1" runat="server" AlternateText="<%$ Resources: Default, Delete %>" ImageUrl="~/img/delete.png" /></a> <asp:Button runat="server" CommandName="Delete" ID="btnDelete" Style="display: none;" /> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView>
Najdôležitejšia časť sa deje v Code Behind, priradenie dialógu na odkaz
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { HtmlAnchor linkDelete = (HtmlAnchor)e.Row.FindControl("linkDelete"); Button btnDelete = (Button)e.Row.FindControl("btnDelete"); string prompt = "$.prompt('Naozaj chcete danú položku zmazať?" + "<input type=\"hidden\" value=\"{0}\" name=\"hidID\" />'" + ", {{buttons: {{ Áno: true, Nie: false }}, callback: confirmDeleteResult}} ); return false; "; linkDelete.Attributes["onclick"] = string.Format(prompt, btnDelete.ClientID); } }
Pre dosiahnutie lepšieho efektu odporúčam (v mojom prípade do ObjectDataSource) pridať zobrazenie hlásenia o úspešnom vymazaní položky
protected void invoicesDS_Deleted(object sender, ObjectDataSourceStatusEventArgs e) { string prompt = "<script>$(document).ready(function(){{$.prompt('{0}!');}});</script>"; string message = string.Format(prompt, "Položka úspešne zmazaná"); }
ASP.NET a vylepšenie štandardných WebForms komponent
Pri práci s WebForms komponentami v ASP.NET som si viackrát želal, aby DropDownList a RadioButtonList mali metódy... čítať ďalej
Môj pohľad na Windows Phone 7
Ak sledujete dianie okolo inteligentných mobilných zariadení určite vám neuniklo uvedenie nového mobilného... čítať ďalej
Komentáre
K článku "Ako na mazanie položiek GridView s efektným JavaScriptovým potvrdením" zatiaľ nie sú žiadne komentáre.
Pridať komentár
Autor
Autor je študentom informatiky na Univerzite Karlovej v Prahe, pracuje ako Solution Architect Assistant a pôsobil aj ako prispievateľ počítačového magazínu.

RSS komentárov




