2010-11-19 23 views
0

私はレコードを削除するには、[削除]リンクを持っているのGridViewを持っています。私はDeleteButtonFieldクラスを作成しましたが、テキストをイメージ(アイコン)に置き換えたいと思います。これは可能ですか?ここに私のGridViewです:ButtonFieldをGridViewの画像に置き換えることはできますか?

<asp:GridView 
    ID="GridView1" 
    runat="server" 
    <.. removed dome properties ..> 
    > 
    <Columns> 
    <CustomControls:DeleteButtonField ConfirmText="Delete this record?" /> 
    <.. other columns ..> 
    </Columns> 
</asp:GridView> 

、ここで私のDeleteButtonFieldクラスです:

using System; 
using System.Web.UI.WebControls; 

namespace CustomControls 
{ 
    public class DeleteButtonField : ButtonField 
    { 
     private string _confirmText = "Delete this record?"; 

     public string ConfirmText 
     { 
      get { return _confirmText; } 
      set { _confirmText = value; } 
     } 

     public DeleteButtonField() 
     { 
      this.CommandName = "Delete"; 
      this.Text = "Delete"; 
      this.ImageUrl = "App_GlobalResources/Del.png"; // doesn't work 
     } 

     public override void InitializeCell(DataControlFieldCell cell, DataControlCellType cellType, DataControlRowState rowState, int rowIndex) 
     { 
      base.InitializeCell(cell, cellType, rowState, rowIndex); 
      if (cellType == DataControlCellType.DataCell) 
      { 
       WebControl button = (WebControl)cell.Controls[0]; 
       button.Attributes["onclick"] = String.Format("return confirm('{0}');", _confirmText); 
      } 
     } 
    } 
} 

が可能、このですか?あなたが見ることができるように私は私のDeleteButtonField.csクラスに次のコードを追加しますが、それは影響を与えなかった:this.ImageUrl = "App_GlobalResources/Del.png";

感謝。

答えて

1

レッツ・ゴミボタンフィールドをオーバーライドして、単純なテンプレートフィールドで行くのアイデア。それは正しくポストバックを処理し、GridViewの(RowCommand & RowDeleting)イベントが発生します。お役に立てれば! =)

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Web.UI; 
using System.Web.UI.WebControls; 


namespace MyExample.Web 
{ 
    public class MyDeleteButtonField : TemplateField 
    { 
     #region Properties 

     private string _ConfirmText = "Delete Me?"; 
     public string ConfirmText 
     { 
      get { return _ConfirmText; } 
      set { _ConfirmText = value; } 
     } 

     private string _ImageUrl = "~/Assets/Images/Buttons/flip.png"; 
     public string ImageUrl 
     { 
      get { return _ImageUrl; } 
      set { _ImageUrl = value; } 
     } 

     #endregion 

     #region Methods 

     public override bool Initialize(bool sortingEnabled, System.Web.UI.Control control) 
     { 
      base.ItemTemplate = new MyTemplate(this.ConfirmText, this.ImageUrl); 
      return base.Initialize(sortingEnabled, control); 
     } 

     #endregion 

     #region Template 

     public class MyTemplate : ITemplate 
     { 
      private string _ConfirmText; 
      private string _ImageUrl; 

      public MyTemplate(string confirmText, string imageUrl) 
      { 
       _ConfirmText = confirmText; 
       _ImageUrl = imageUrl; 
      } 

      void ITemplate.InstantiateIn(Control container) 
      { 
       ImageButton bt = new ImageButton(); 
       bt.CommandName = "Delete"; 
       bt.ImageUrl = _ImageUrl; 
       bt.ImageAlign = ImageAlign.AbsMiddle; 
       bt.AlternateText = "Delete Me"; 
       bt.OnClientClick = String.Format("return confirm('{0}');", _ConfirmText); 
       container.Controls.Add(bt); 

      } 
     } 

     #endregion 

    } 
} 
+0

@Brian、私は問題を抱えています。イメージをクリックするとレコードが削除されることはありません。あなたは何が間違っているかも知っていますか? –

+0

Mark、上記のコードを見てください。今すぐ働かなければならない。もともと私はあなたのためにTemplateFieldの例を書くつもりだったので、私は私の銃に立ち往生すべきです。それは物事をより良く扱う(ポストバックなど)。 :) –

+0

@ブライアン、ありがとう。これを実行すると、ASP.NET開発Webサーバーがクラッシュします。 –

1

マーク、私はあなたがカスタムクラスだと思う、非常に近いです。 ButtonFieldクラスでイメージを表示するには、ImageUrlプロパティの両方を指定する必要があります。ButtonTypeプロパティをButtonType.Imageに設定します。

にごDeleteButtonFieldクラスのコンストラクタを更新してみてください。また

public DeleteButtonField() 
{ 
    this.CommandName = "Delete"; 
    this.Text = "Delete"; 
    this.ImageUrl = "App_GlobalResources/Del.png"; 
    this.ButtonType = ButtonType.Button; 
} 

、あなたは.aspxページで宣言構文によって、これらの設定を指定することができます。

<CustomControls:DeleteButtonField ConfirmText="Delete this record?" ImageUrl='...' ButtonType="Image" /> 

ハッピープログラミング!

+0

Scott私は同じ問題を抱え、削除はデータベースに送られません。私はDeleteMethodが呼び出されるとは思わない。その他のアイデアは? –

+0

@マーク:最初の質問は、削除ボタンの画像が表示されていないことを示しました。しかし、あなたの質問は少し違っているようです。つまり、削除が機能していないということです。それで、削除ボタンの画像が私の答えとともに表示されますか? –

+0

実際にボタンの画像は表示されていますが、削除によって実際には何も削除されません。画像がなければ、削除は機能します。少し奇妙ですが、そこにはあります。 –

関連する問題