【问题标题】:Dynamically add HyperLink in GridView在 GridView 中动态添加超链接
【发布时间】:2012-10-28 14:25:04
【问题描述】:

我有两种类型的代码: 第一个:

               <Columns>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:HyperLink runat="server" Text="Скачать объект" NavigateUrl='<%#"objects/" + Eval("Идентификатор") %>'></asp:HyperLink>
                    </ItemTemplate>    
                </asp:TemplateField>
               </Columns>

工作正常。但是 TemplateField 每次都显示。

第二次

            TemplateField templField = new TemplateField();
            HyperLink hypLink = new HyperLink();
            hypLink.NavigateUrl = "<%#\"objects/\" + Eval(\"Идентификатор\") %>";
            hypLink.Text = "Скачать объект";
            templField.InsertItemTemplate = (ITemplate)hypLink;
            tableResults.Columns.Add(templField);

无法使用错误:无法将“System.Web.UI.WebControls.HyperLink”类型的对象转换为“System.Web.UI.ITemplate”类型。为什么第一次添加超链接,第二次没有?

【问题讨论】:

  • 您能否描述一下您使用gridview实现的要求?

标签: c# asp.net gridview hyperlink


【解决方案1】:

这可能有助于开始:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    { 
        var hyperlinkField = new TemplateField();
        hyperlinkField.ItemTemplate = new HyperlinkColumn();
        tableResults.Columns.Add(linkField);
    }
}


class HyperlinkColumn : ITemplate
{
    public void InstantiateIn(System.Web.UI.Control container)
    {
        HyperLink hypLink = new HyperLink()
        container.Controls.Add(link);
    }
}

请注意,您不能在InstantiateIn 中设置NavigateUrlText。在那里你只创建控件。您可以根据行的DataItem 将其数据绑定到RowDataBound

但是

虽然您可以动态地将字段添加到数据绑定控件,但它是 强烈建议静态声明字段然后显示 或隐藏,视情况而定。静态声明所有字段 减小父数据绑定控件的视图状态大小。

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.templatefield.templatefield.aspx

【讨论】:

  • 您只需更改该列的Visible 属性。例如:tableResults.Columns[0].Visible=false; 如果要隐藏第一列。
【解决方案2】:

templField.InsertItemTemplate 需要一个 ITemplate 对象,其中超链接不会扩展此接口。

在您的第一个声明性示例中,超链接是 ItemTemplate 的主机,它扩展了此接口 ITemplate

【讨论】:

    猜你喜欢
    • 2016-03-15
    • 2014-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    • 1970-01-01
    相关资源
    最近更新 更多