如何在没有数据字段的情况下在 gridview 中创建超链接?

how to make hyperlink in gridview without datafield?

开发语言:c# asp.net web forms 4.5

我看过很多帖子,所有帖子都通过 datatextfield() 或类似的方式创建了一个带有其中任一数据字段的超链接。或从后端调用 eval。 这两件事我都没有做,所以我尽我所能,但没有用。 CommandField、HyperLinkeField、HyperLink,.. 都不起作用。

要点是数据输出正常,但我似乎无法将其设为超链接。这样超链接是不是不可能了?

我正在尝试在 gridview 上创建超链接。 问题是我正在尝试制作超链接的专栏 不从数据字段获取数据。

通过gridview的onRowDataBound方法获取 像这样..

<asp:GridView runat="server" ID="someGrid" CellPadding="10" 
    DataKeyNames="idx" AutoGenerateColumns="false"
    selectMethod="someGrid_GetData" ItemType="someTable"
    updateMethod="someGrid_UpdateItem" AutoGenerateEditButton="true"
    deleteMethod="someGrid_DeleteItem" AutoGenerateDeleteButton="true"
    onRowDataBound="someGrid_RowDataBound">
    <Columns>
        <asp:BoundField DataField="thing1" HeaderText="thing1" />
        <asp:BoundField DataField="thing2" HeaderText="thing2"/>
        <asp:DynamicField DataField="poDate" DataFormatString="{0:d}" />
        <asp:BoundField HeaderText="vendor" />
        <asp:CommandField HeaderText="sku" ShowSelectButton="true" SelectText="{0}" ButtonType="Link"/>
    </Columns>
</asp:GridView>

在代码背景上,它是这样的..

    protected void soGrid_RowDataBound(object sender, GridViewRowEventArgs e)
    {  
        using (soAction soa = new soAction())
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                string s = e.Row.Cells[2].Text;
                string thin1 = soa.get_thin1(s);
                e.Row.Cells[4].Text = thin1;

                string thin2 = soa.get_thin2(s);
                e.Row.Cells[5].Text = thin2;
            }
        }
    }

谢谢!

编辑: 也许我不清楚这里的挑战是什么…… 通常这些示例在 gridview 中使用 dataTextField 属性 但是 我无法使用 dataTextField 属性 因为我正在绑定数据 取决于之后渲染的模型。 我这样做是因为我想将 itemType 设置为 someTable 所以我可以使用 asp.net.

的 updatemethod 和 deleteMethod

只需像这样使用 TemplateField,您就可以在模板字段中做任何您想做的事情,合并来自多个列的数据,创建控件等等:

<Columns>    
<asp:TemplateField HeaderText="FirstName" SortExpression="FirstName">
        <EditItemTemplate>
            <asp:TextBox ID="TextBox1" runat="server"
                Text='<%# Bind("FirstName") %>'></asp:TextBox>
        </EditItemTemplate>
        <ItemTemplate>
            <asp:Label ID="Label1" runat="server"
                Text='<%# Bind("FirstName") %>'></asp:Label>
        </ItemTemplate>
    </asp:TemplateField>
</Columns>

https://docs.microsoft.com/en-us/aspnet/web-forms/overview/data-access/custom-formatting/using-templatefields-in-the-gridview-control-cs