2010-11-19 20 views
0

Kayıt silmek için silme bağlantısına sahip bir GridView'ım var. Bir DeleteButtonField sınıfı oluşturdum ancak metni bir görüntü ile değiştirmek istiyorum (bir simge). Mümkün mü? Benim DeleteButtonField sınıfı var buradaBir ButtonField'ı GridView'da bir görüntüyle değiştirmek mümkün mü?

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

ve:

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); 
      } 
     } 
    } 
} 

bu mümkün mü İşte benim GridView var? Gördüğünüz gibi, DeleteButtonField.cs sınıfıma şu kodu ekledim ancak hiçbir etkisi olmadı: this.ImageUrl = "App_GlobalResources/Del.png";

Teşekkürler.

cevap

1

Düğme alanını geçersiz kılma fikrini çöpe atıp basit bir şablon alanıyla devam edelim. Postaları doğru bir şekilde ele alacak ve GridView'ın (RowCommand & RowDeleting) olaylarını artıracaktır. Bu yardımcı olur umarım! =)

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, Bir sorunum var. Görüntüyü tıkladığımda kayıtlar şimdi silinmez. Neyin yanlış gittiğini biliyor musun? –

+0

Mark, yukarıdaki kodlara bir göz atın. Şimdi çalışmalıyım. Orijinal olarak sizin için bir TemplateField örneği yazacağım gibi silahlarıma takılmalıydım. İşleri daha iyi işler (geri gönderimler, vb.). :) –

+0

@Brian, bunun için teşekkürler. Bunu çalıştırdığımda ASP.NET Geliştirme web sunucusu çöküyor! –

1

Mark, sanırım özel sınıfınız çok, çok yakın. ButtonField sınıfı için bir görüntü göstermek içinözelliğini ve belirtmek için ButtonType özelliğini ButtonType.Image olarak ayarlayın.

için DeleteButtonField sınıfının yapıcısı güncellemeyi deneyin: Alternatif

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

, sen .aspx sayfasında bildirim sözdizimi yoluyla bu ayarları belirtebilirsiniz:

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

Mutlu Programlama!

+0

Scott Aynı sorunu alıyorum, silme veritabanına gönderilmez. DeleteMethod'un aradığını düşünmüyorum. Başka fikirlerin var mı? –

+0

@Mark: İlk sorunuz, Sil düğmesi görüntüsünün gösterilmediğini belirtti. Ama şimdi sorunuz biraz farklı görünüyor - yani, silme çalışmıyor. Cevabımla şimdi gösterilen silme düğmesi resmi mi? –

+0

gerçekten de düğme görüntüsü gösteriliyor, ancak silme aslında hiçbir şeyi silmiyor. Görüntü olmadan silme çalışır. Biraz garip, ama biz varız. –

İlgili konular