Могу ли я программно добавить кнопку ссылки в gridview?
Я просматривал некоторые подобные вопросы без какой-либо удачи. То, что я хотел бы сделать, это иметь вид сетки, который для определенных элементов показывает кнопку ссылки, а для других элементов - гиперссылку. Вот код, который у меня сейчас есть:
public void gv_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
var data = (FileDirectoryInfo)e.Row.DataItem;
var img = new System.Web.UI.HtmlControls.HtmlImage();
if (data.Length == null)
{
img.Src = "/images/folder.jpg";
var lnk = new LinkButton();
lnk.ID = "lnkFolder";
lnk.Text = data.Name;
lnk.Command += new CommandEventHandler(changeFolder_OnCommand);
lnk.CommandArgument = data.Name;
e.Row.Cells[0].Controls.Add(lnk);
}
else
{
var lnk = new HyperLink();
lnk.Text = data.Name;
lnk.Target = "_blank";
lnk.NavigateUrl = getLink(data.Name);
e.Row.Cells[0].Controls.Add(lnk);
img.Src = "/images/file.jpg";
}
e.Row.Cells[0].Controls.AddAt(0, img);
}
}
где первая ячейка является TemplateField. В настоящее время все отображается правильно, но кнопки ссылок не вызывают обработчик события Command, и все элементы управления исчезают при обратной передаче.
Есть идеи?
3 ответа
Я думаю, что вы должны попытаться принудительно выполнить повторное связывание GridView при обратной передаче. Это обеспечит повторное создание любых динамических элементов управления и их обработчиков событий. Это также должно предотвратить их исчезновение после обратной передачи.
Я звоню DataBind()
на GridView при обратной передаче.
Вы также можете добавить их в событие Row_Created, и тогда вам не нужно отменять проверку PostBack
Почему бы вам не создать кнопку декларативно, а создать декларативно (с помощью литерального элемента управления), а затем использовать синтаксис привязки данных и установить свойство видимости, являющееся свойством Visible элементов управления, равным true или false по мере необходимости:
Visible='<%#((FileDirectoryInfo)Container.DataItem).Length == null) %>'
Что-то вроде того.