martyres72 Ответов: 2

Как динамически изменить гиперссылочное поле 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/

2 Ответов

Рейтинг:
14

Karthik_Mahalingam

попробовать это

protected void GridView2_RowDataBound(object sender, GridViewRowEventArgs e)
       {
           if (e.Row.RowType == DataControlRowType.DataRow)
           {
               string text = e.Row.Cells[1].Text;
               HyperLink hl = e.Row.FindControl("Hyperlink1") as HyperLink;
               if (hl != null)
               {
                   if (text == "ATP")
                       hl.NavigateUrl = "~/Reports/LabDetail/ATPDetails.aspx";
                   else if (text == "Water")
                       hl.NavigateUrl = "~/Reports/LabDetail/WaterDetails.aspx";
               }
           }
       }


Рейтинг:
1

martyres72

окончательный код (рабочий)
protected void GridView2_RowDataBound(отправитель объекта, GridViewRowEventArgs e)
{

foreach (строка GridViewRow в GridView2. Rows)
{
if (row. Cells[1].Текст = = " СПС")
{
Гиперссылка hl = строка.FindControl ("HyperLink1") как гиперссылка;
hl. NavigateUrl = " ~ / Reports/LabDetail/ATPDetails. aspx";
}
if (row. Cells[1].Текст = = " Вода")
{
Гиперссылка hl = строка.FindControl ("HyperLink1") как гиперссылка;
hl. NavigateUrl = " ~ / Reports/LabDetail/WaterDetails.aspx";
}

}

}