2009-08-05 13 views
0

私は削除をサポートするGridViewを持っています。私は 'あなたはこの行を削除してもよろしいですか?'という質問をポップアップウィンドウに追加したいと思います。データビューの行を削除する前に削除を確認する

マイコード:背後

<asp:GridView id="GridAccounts" runat="server" AutoGenerateColumns="False" 
     ShowFooter="True" DataKeyNames="ID" 
     DataSourceID="AccountDataSource" onrowcommand="GridAccounts_RowCommand"> 
     <SelectedRowStyle BackColor="Lime" /> 
     <Columns> 
      <asp:CommandField ButtonType="Image" ShowDeleteButton="True" DeleteImageUrl="~/Pictures/delete.jpg" /> 
      <asp:TemplateField HeaderText="ID" InsertVisible="False" SortExpression="ID"> 
       <EditItemTemplate> 
        <asp:Label ID="LabelAccountIDUpdate" runat="server" Text='<%# Eval("ID") %>'></asp:Label> 
       </EditItemTemplate> 
       <FooterTemplate> 
        <asp:Button ID="ButtonAccountIDInsert" runat="server" CommandName="Insert" Text="Insert" /> 
       </FooterTemplate> 
       <ItemTemplate> 
        <asp:Label ID="LabelAccountID" runat="server" Text='<%# Bind("ID") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 

コード:

protected void GridPaymentMethod_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      ImageButton deleteButton = (ImageButton)e.Row.Cells[0].Controls[0]; 
      MyMoney.PaymentMethodRow row = (MyMoney.PaymentMethodRow)((System.Data.DataRowView)e.Row.DataItem).Row; 
      deleteButton.OnClientClick = string.Format("return confirm('Are you sure you want to delete payment method {0}?');", row.Name.Replace("'", @"\'")); 
     } 
    } 

これは、レンダリングのように:

<input type="image" src="Pictures/delete.jpg" alt="Delete" onclick="return confirm('Are you sure you want to delete payment method Gotovina?');javascript:__doPostBack('ctl00$MainContent$GridPaymentMethod','Delete$0')" style="border-width:0px;" /> 

私は確認ウィンドウで[OK]をクリックすると、ポストバックが発生しますが、何も起こりません。 RowDataBoundコードをコメントアウトすると、削除よりもOKになります。コードなしの確認ポップアップ:

<input type="image" src="Pictures/delete.jpg" alt="Delete" onclick="javascript:__doPostBack('ctl00$MainContent$GridPaymentMethod','Delete$0')" style="border-width:0px;" /> 

私は間違っていますか?

答えて

1

あなたは、ButtonType = "リンク" にButtonType = "画像" を変更しなければならない - それからのonclick = "..." javascriptをせずにレンダリングされます:___ doPostBack(...)の部分。 GridPaymentMethod_RowDataBoundイベントでは、deleteButton.Text = "< img src = \" path_to_image \ ".../>"(<の代わりにhtmlエンティティを使用します)のようなものを設定します。

また、ImageButtonをASP.NET AjaxToolkitスイートのComamndName = "delete"とConfirmButtonExtenderで使用することもできます。

3

thisはあなたがしようとしているものの一例です。それはより洗練されたものであり、コードの後ろにナッツを置く必要はありません。あなたのコードで

+0

CommandFieldについて魔法はありません。起動するアクションにCommandNameを設定した標準のLinkBut​​tonを追加するだけです。あなたはそれをあなた自身のLinkBut​​tonで正しいCommandNameに置き換えることができます(例えば、CommandName = "Delete"は削除イベントを引き起こします)。 –

+0

私はこのチュートリアルを使用しました:http://www.asp.net/Learn/data-access/tutorial-22-cs.aspx – sventevit

+0

aspxのOnClickハンドラのないcommandNameの素晴らしいヒント。 – adrianos

0
deleteButton.OnClientClick = string.Format("((!confirm('Are you sure you want to delete payment method {0}?'))?return false);", row.Name.Replace("'", @"\'")); 
関連する問題