Возможно ли заменить ButtonField изображением в GridView?
У меня есть 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";
Благодарю.
2 ответа
Марк, я думаю, что у тебя класс очень, очень близко. Для 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" />
Удачного программирования!
Давайте отбросим идею переопределения поля кнопки и перейдем к простому полю шаблона. Он будет правильно обрабатывать посты и вызывать события 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
}
}