Чтение переменной в 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
}
}