2

我是编程新手。我创建了一个 GridView 并使用 SqlDataSource 进行绑定。网格显示来自 SQL Server 数据库的几个变量,包括超文本链接。

对于特定字段,我需要: - 评估数据库字段“Journal_title” - 将其作为较长字符串的一部分插入到 TemplateField.NavigateUrl - 如果另一个字段(“Indexed_NIH”)为 NULL,则隐藏链接

字符串的语法是正确的,如果我插入一个标题就可以工作,但是我需要从数据库中读取所有标题并将它们插入到 URL 中。

我当前的代码成功地在适当的记录中显示了链接文本(即当“Indexed_NIH!= NULL”时),但 NavigateUrl 没有正确显示。

欢迎任何建议 - 请记住我是新手!

<asp:TemplateField HeaderText="PubMed">
<ItemTemplate>
        <asp:HyperLink ID="lnkPubMed" runat="server" Text="S" Target="_blank" NavigateUrl='http://www.ncbi.nlm.nih.gov/pubmed?term="<%# Eval("Journal_title") %>"[Journal]) AND ("last 3 years" [PDat])"' Visible='<%# Convert.ToString(Eval("Indexed_NIH")) == "True" ? true : false %>' >
    </asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>

代码隐藏中没有任何内容。

4

3 回答 3

1

非常感谢你们俩的帮助。

最后我能够保留我当前的代码,并且经过多次试验和错误(!!!)我发现这给了我想要的东西:

<asp:TemplateField HeaderText="PubMed">
<ItemTemplate>
<asp:HyperLink ID="lnkPubMed" runat="server" Text="S" Target="_blank" NavigateUrl='<%# "http://www.ncbi.nlm.nih.gov/pubmed?term=" + (Eval("Journal_title")) + "[Journal] (\"Last 3 years\"[PDat])" %>' Visible='<%# Convert.ToString(Eval("Indexed_NIH")) == "True" ? true : false %>' >
</asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>

我的问题似乎包括:转义引号;正确地将字符串添加到 URL 中;当然还有经验不足!

再次衷心感谢!

于 2012-07-13T15:30:49.737 回答
1

好的方法是利用RowDataBound网格控件的事件并将链接分配给超链接按钮

protected void Gv_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        object[] dataitems = ((DataRowView)e.Row.DataItem).Row.ItemArray;
        HyperLink hl = (HyperLink)e.Row.FindControl(ControlName);
        if(hl!=null)
        {
          //write code to assing value to link
        }
    }
}
于 2012-07-12T15:42:58.887 回答
0

您可以在行数据绑定事件中读取 GridView 的每个项目。将行数据绑定事件添加到您的网格视图。

void CustomersGridView_RowDataBound(Object sender, GridViewRowEventArgs e)
{

if(e.Row.RowType == DataControlRowType.DataRow)
{
  //Here in cell specify the index of link button
    string text = e.Row.Cells[0].Text 

 }

}
于 2012-07-12T15:45:22.703 回答