Чтение переменной в NavigateUrl в TemplateField в GridView asp.net 4 C#

Я новичок в программировании. Я создал 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>

Ничего в коде позади.

3 ответа

Хороший способ сделать это использовать 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
        }
    }
}

Большое спасибо вам обоим за вашу помощь.

В конце концов я смог сохранить свой текущий код, и после долгих проб и ошибок (!!!) я обнаружил, что это дает мне то, что я искал:

<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; ну и конечно же неопытность!

Снова мое искреннее спасибо!

Вы можете прочитать каждый элемент вашего 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 

 }

}
Другие вопросы по тегам