Как динамически изменить гиперссылочное поле gridview
У меня есть gridview с колонкой hyperlinkfield. Я ищу какие-то средства с указанием navigateurl свойство в hyperlinkfield, в зависимости от значения в одном из столбцов в GridView. Например, если столбец с привязкой к данным содержится "автомобиль", navigateurl свойство должно быть "~/myweb/автомобиля.aspx-файл".........кроме того, если в столбце содержится "грузовик", в NavURL должно быть "~/myweb/грузовик.aspx-файл".
Что я уже пробовал:
Разметка:
<asp:GridView ID=" GridView2 "runat=" server "AllowPaging= "True" AutoGenerateColumns= "False" CellPadding= "4" DataSourceID= "SqlDataSource2" ForeColor= "#333333" GridLines= "None" OnSelectedIndexChanged= "GridView2_SelectedIndexChanged" OnRowDataBound= "GridView2_RowDataBound">
<alternatingrowstyle backcolor= "White" forecolor= "#284775">
&ЛТ;колонны&ГТ; &ЛТ;АСП:вариант командное поле в качестве ShowSelectButton="правда" и GT;
& lt;Headerstyle Width= "100px" />
&ЛТ;как ASP:BoundField datafield в="Столбец1" HeaderText="анализ" только для чтения="истинный" SortExpression="Столбец1"и GT;
& lt;Headerstyle Width= "120px" />
<asp:BoundField DataField=" testdate "DataFormatString=" {0:d} " HeaderText=" Test Date "ReadOnly= "True" SortExpression= "testdate" >
& lt;Headerstyle Width= "100px" />
&ЛТ;как ASP:BoundField datafield в="свидание" DataFormatString="{0:d} с" HeaderText="свидание" только для чтения="истинный" SortExpression="свидание" и GT;
& lt;Headerstyle Width= "100px" />
<asp:BoundField DataField=" FailureDate "DataFormatString=" {0:d} "HeaderText= " Failure Date" SortExpression= "FailureDate" />
&ЛТ;как ASP:BoundField datafield в="sampleid" HeaderText="код" значение readonly="истинный" SortExpression="sampleid"&ГТ;
<itemstyle horizontalalign= "Center">
<%--<asp:HyperLinkField HeaderText= "SampleID" DataNavigateUrlFields= "SampleID" DataNavigateUrlFormatString= " ~ / Reports/LabDetail/ATPDetails?SampleID={0} "DataTextField= "SampleID" SortExpression= "SampleID" />--%>
&ЛТ;АСП:HyperLinkField navigateurl свойство="~/отчеты/LabDetail/ATPDetails.aspx-файл" текст="просмотреть отчет" /&ГТ;
<asp:TemplateField HeaderText= "aaaa">
& lt;itemtemplate>
&ЛТ;АСП:гиперссылку с ID="HyperLink1" атрибут runat="сервер" navigateurl свойство='~/фиктивные.aspx-файл в'>свяжитесь с
< editrowstyle backcolor= "#999999">
&ЛТ;footerstyle свойства backcolor="#5D7B9D" шрифт-жирный="истинный" цвет="белый"и GT;
&ЛТ;HeaderStyle свойства backcolor="#5D7B9D" шрифт-жирный="истинный" цвет="белый" /&ГТ;
&ЛТ;pagerstyle свойства backcolor="#284775" цвет="белый" horizontalalign="центр"и GT;
<rowstyle backcolor= "#F7F6F3 "forecolor= " #333333">
&ЛТ;SelectedRowStyle свойства backcolor="#E2DED6" шрифт-жирный="истинный" цвет="#333333" /&ГТ;
<sortedascendingcellstyle backcolor= "#E9E7E2">
<sortedascendingheaderstyle backcolor= "#506C8C">
<sorteddescendingcellstyle backcolor= "#FFFDF8">
<sorteddescendingheaderstyle backcolor= "#6F8DAE">
Кодовая Попытка 1:
protected void GridView2_RowDataBound(отправитель объекта, GridViewRowEventArgs e)
{
if (row. Cells[1].Текст = = " СПС")
{
Гиперссылка hl = e. Row.FindControl ("Hyperlink1") как гиперссылка;
hl. NavigateUrl = " ~ / Reports / LabDetail / ATPDetails. aspx";
}
if (row. Cells[1].Текст = = " Вода")
{
Гиперссылка hl = e. Row.FindControl ("Hyperlink1") как гиперссылка;
hl. NavigateUrl = " ~ / Reports / LabDetail / WaterDetails.aspx";
}
}
Попытка Код 2:
protected void GridView2_RowDataBound(отправитель объекта, GridViewRowEventArgs e)
{
foreach (строка GridViewRow в GridView2. Rows)
{
if (row. Cells[1].Текст = = " СПС")
{
Гиперссылка hl = e. Row.FindControl ("Hyperlink1") как гиперссылка;
hl. NavigateUrl = " ~ / Reports / LabDetail / ATPDetails. aspx";
}
if (row. Cells[1].Текст = = " Вода")
{
Гиперссылка hl = e. Row.FindControl ("Hyperlink1") как гиперссылка;
hl. NavigateUrl = " ~ / Reports / LabDetail / WaterDetails.aspx";
}
}
}
Karthik_Mahalingam
в чем проблема?
martyres72
код, стоящий за этим, не обновляет NavigateURL.
Karthik_Mahalingam
опубликуйте код разметки для всего gridview
Karthik_Mahalingam
row. Cells[1].Текст
эти данные принадлежат "столбцу 1"??
martyres72
да.
martyres72
таким образом, по сути, мой gridview привязан к базе данных, а столбец 1 содержит значение, которое я хочу диктовать NavigateURL
Karthik_Mahalingam
хорошо,может быть, вы не получаете правильное значение в строке.Клетки[1].Текст
martyres72
Я хорошо разбираюсь в этом значении, и я устанавливаю значение текстового поля с ним, чтобы быть уверенным.
martyres72
ну, я думаю, это не обязательно так, потому что я получаю значение в текстовом поле на другом событии.
Karthik_Mahalingam
я проверил ваш код с некоторыми фиктивными данными, он отлично работает. может быть, вы что-то упускаете.
martyres72
хорошо знать. Думаю, я продолжу поиски.
martyres72
Я даже пытался обернуть код в это:
foreach (строка GridViewRow в GridView2. Rows)
Он идет дальше, но затем выбрасывает исключение для какой-то другой проблемы
Karthik_Mahalingam
не используйте foreach внутри GridView2_RowDataBound
поместите точку останова и проверьте данные в ячейке 1
martyres72
Я внес кое-какие небольшие изменения и теперь работаю. Я использую "foreach". разве это плохая практика?
Karthik_Mahalingam
никогда не используйте foreach
опубликуйте код, я его исправлю
martyres72
В качестве решения я добавил рабочий код. Видите какие-нибудь проблемы?
Karthik_Mahalingam
проверьте мое решение, оно должно работать
martyres72
он отлично работает. Спасибо за помощь.
Karthik_Mahalingam
добро пожаловать
martyres72
мой код неправильно вставляется. Вот разметка для гиперссылки, которую я пытаюсь обновить:
<asp:TemplateField HeaderText= "aaaa">
& lt;itemtemplate>
&ЛТ;АСП:гиперссылку с ID="HyperLink1" атрибут runat="сервер" navigateurl свойство='~/фиктивные.aspx-файл в'>свяжитесь с
Karthik_Mahalingam
вставлять ее Создайте новую скрипку - JSFiddle[^] и поделитесь ссылкой
martyres72
https://jsfiddle.net/3nwdcoL9/