Могу ли я программно добавить кнопку ссылки в gridview?

StackOverflow https://stackoverflow.com/questions/1039474

Вопрос

Я просматривал некоторые похожие вопросы без всякой удачи. То, что я хотел бы сделать, это иметь вид сетки, который для определенных элементов показывает кнопку ссылки, а для других элементов - гиперссылку. Вот код, который у меня сейчас есть:

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, и все элементы управления исчезают при обратной передаче.

Есть идеи?

Это было полезно?

Решение

Я думаю, вам следует попытаться повторно выполнить привязку GridView после обратной передачи. Это обеспечит повторное создание любых динамических элементов управления и их обработчиков событий. Это также должно предотвратить их исчезновение после обратной передачи.

IOW, вызовите DataBind () в GridView при обратной передаче.

Другие советы

Вы также можете добавить их в событие Row_Created, и тогда вам не нужно отменять! Проверка PostBack

Почему бы вам не создать кнопку декларативно, а создать декларативно (с помощью литерального элемента управления), а затем с помощью синтаксиса привязки данных и установить для свойства видимости, являющегося свойством Visible элементов управления, значение true или false, если это необходимо:

Visible='<%#((FileDirectoryInfo)Container.DataItem).Length == null) %>' 

Нечто подобное.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top