【问题标题】:C# How do I create a Hyperlink OnClick event on GridView?C# 如何在 GridView 上创建超链接 OnClick 事件?
【发布时间】:2013-03-08 20:37:00
【问题描述】:

我无法创建我想要的 GridView。 我希望用户进入网站并查看附加到数据库的 GridView。 列是:ID, InsertionTime, Filepath, ProccessedByUser 现在我希望用户单击他/她想要处理的文件路径。当他/她单击文件路径时,我希望将他们的用户名(使用内置 asp 网站身份验证登录)更新(添加)到数据库中。

我的标记是标准的,我不必管理背后的代码。

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
    DataKeyNames="ID" DataSourceID="AccessDataSource1" 
    onselectedindexchanged="GridView1_SelectedIndexChanged">
    <Columns>
        <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" 
            ReadOnly="True" SortExpression="ID" />
        <asp:BoundField DataField="starttime" HeaderText="starttime" 
            SortExpression="starttime" />
        <asp:HyperLinkField DataNavigateUrlFields="path" DataTextField="path" 
            HeaderText="path" />
        <asp:BoundField DataField="user" HeaderText="user" SortExpression="user" />
    </Columns>
</asp:GridView>

我尝试使用 HyperlinkField,但它似乎不支持 onlick 事件。

有什么建议吗? 谢谢。

【问题讨论】:

    标签: asp.net gridview


    【解决方案1】:

    我假设您正在寻找具有OnClick 事件的LinkButton 控件。

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
        DataKeyNames="ID" DataSourceID="AccessDataSource1" 
        onselectedindexchanged="GridView1_SelectedIndexChanged">
        <Columns>
            <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" 
                ReadOnly="True" SortExpression="ID" />
            <asp:BoundField DataField="starttime" HeaderText="starttime" 
                SortExpression="starttime" />
            <asp:TemplateField HeaderText="Path" SortExpression="Filepath">
                <ItemTemplate>
                    <asp:LinkButton ID="LbPath" runat="server" 
                        Text='<%# Eval("Filepath") %>'
                        CommandName="PathUpdate" 
                        CommandArgument='<%#Bind("path") %>'>
                    </asp:LinkButton>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:BoundField DataField="user" HeaderText="user" SortExpression="user" />
        </Columns>
    </asp:GridView>
    

    现在您可以处理LinkButton's click eventGridView's RowCommand 事件。

    protected void Gridview1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "PathUpdate")
        {
            string path= e.CommandArgument.ToString();
            // do you what you need to do
        }
    }
    

    请注意,我使用了 TemplateField,这是 GridView 中最具动态性的列类型,因为您可以添加任何您想要的内容,甚至是嵌套的 GridView 或 UserControls

    【讨论】:

    • 嘿蒂姆!非常感谢!你解决了我的问题,但我仍然希望 LinkBut​​ton 的 Text 是一个绑定值。我怎样才能做到这一点?我试过Bind(),但不允许。
    • @Hedgie:为什么要使用Bind 而不是Eval?无论如何它是只读的。编辑了我的答案以显示如何在 Text 属性上使用 Eval
    • 漂亮!奇迹般有效!非常感谢蒂姆! :)
    【解决方案2】:

    你可以使用一个ButtonField,然后处理gridview的OnRowCommand。此处示例:

    http://msdn.microsoft.com/SV-SE/library/system.web.ui.webcontrols.buttonfieldbase.buttontype.aspx

    您可以设置 ButtonField 的 ButtonType 属性以将按钮显示为链接。

    【讨论】:

      猜你喜欢
      • 2016-06-25
      • 1970-01-01
      • 2018-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-06
      • 1970-01-01
      相关资源
      最近更新 更多