如何利用GridView两列单元格值构建超链接
解决方案:在GridView列中结合多字段构建超链接
要实现你需要的“基于第一列(Type)的值构建第二列(System)的超链接”需求,只需要修改System列的HyperLink控件的NavigateUrl绑定表达式,同时引用两个字段的值进行拼接即可。
修改后的System列核心代码
原来的System列只单独使用了System字段,现在我们通过string.Format同时传入Type和System两个字段的值来生成目标URL:
<asp:TemplateField HeaderText="System" SortExpression="System"> <EditItemTemplate> <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("System") %>'></asp:TextBox> </EditItemTemplate> <ItemTemplate> <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# string.Format("http://something.com/{0}/{1}", Eval("Type"), Eval("System")) %>' Target="_blank" Text='<%# Eval("System", "{0}") %>'> </asp:HyperLink> </ItemTemplate> </asp:TemplateField>
完整的GridView代码
下面是修改后的完整GridView代码,其他列的功能保持不变:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SQL" Class='table table-hover' BorderStyle="None" BorderColor="White" GridLines="None" UseAccessibleHeader="False" ShowFooter="True" ShowHeaderWhenEmpty="True" EnableTheming="False"> <Columns> <asp:BoundField DataField="Type" HeaderText="Type" SortExpression="Type" /> <asp:TemplateField HeaderText="System" SortExpression="System"> <EditItemTemplate> <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("System") %>'></asp:TextBox> </EditItemTemplate> <ItemTemplate> <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# string.Format("http://something.com/{0}/{1}", Eval("Type"), Eval("System")) %>' Target="_blank" Text='<%# Eval("System", "{0}") %>'> </asp:HyperLink> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Region" SortExpression="Region"> <EditItemTemplate> <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Region") %>'></asp:TextBox> </EditItemTemplate> <ItemTemplate> <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# Eval("Region", "http://evemaps.dotlan.net/Map/{0}/") %>' Target="_blank" Text='<%# Eval("Region", "{0}") %>'></asp:HyperLink> </ItemTemplate> </asp:TemplateField> <asp:BoundField DataField="Location" HeaderText="Location" SortExpression="Location" /> <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" /> <asp:BoundField DataField="Owner" HeaderText="Owner" SortExpression="Owner" /> <asp:BoundField DataField="Notes" HeaderText="Notes" SortExpression="Notes" /> <asp:TemplateField HeaderText="EvE Time" SortExpression="EvE Time"> <EditItemTemplate> <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("[EvE Time]") %>'></asp:TextBox> </EditItemTemplate> <ItemTemplate> <asp:Label ID="EvETimeLB" runat="server" Text='<%# Bind("[EvE Time]") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> </Columns> <HeaderStyle Font-Bold="True" /> </asp:GridView>
关键说明
- 使用
string.Format可以灵活组合多个数据源字段的值,{0}对应第一个参数Eval("Type"),{1}对应第二个参数Eval("System") - 确保
Eval中的字段名和数据源返回的字段名完全一致(比如这里的Type和System) - 如果需要调整URL格式,直接修改
string.Format的模板字符串即可,适配不同的域名或路径结构
内容的提问来源于stack exchange,提问作者kendarr
相关产品推荐
相关产品推荐

