0

レコードを削除するための削除リンクを持つ GridView があります。DeleteButtonField クラスを作成しましたが、テキストを画像 (アイコン) に置き換えたいと考えています。これは可能ですか?これが私の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";

ありがとう。

4

2 に答える 2

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

    }
}
于 2010-11-19T20:54:39.637 に答える
1

マーク、あなたのカスタム クラスは非常に近いと思います。クラスが画像を表示するには、プロパティを指定し、プロパティを に設定ButtonFieldする必要があります。ImageUrlButtonTypeButtonType.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" /> 

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

于 2010-11-20T23:33:07.307 に答える