Вроде бы легко, но мне с этим тяжело.
<asp:TemplateField HeaderText="ID" InsertVisible="False" SortExpression="id">
<ItemTemplate>
<a href="/visit.aspx?Id=<%#Eval("Id")%>" id="ID" name="ID"> <%#Eval("Id")%> </a>
</ItemTemplate>
</asp:TemplateField>
В последнем столбце gridview есть кнопка. Нажмите эту кнопку, чтобы обновить базу данных и обновить gridview. Он также просматривает столбец идентификатора в представлении сетки и пытается выделить отредактированную строку.
Код работает без проблем, если поле ID является ограниченным полем и не является URL-адресом. Но когда это URL-адрес, я не могу прочитать текстовое значение URL-адреса. Я пробовал различные решения (помощь от SO и онлайн)
Ссылка HyperLink = (HyperLink) row.FindControl ("id"); // не работает
((HyperLink)GridView1.Rows[i].Cells[0].Controls[0]).Text // не работает
Это фрагмент кода, с которым мне нужна помощь
for (int i = 0; i < GridView1.Rows.Count; i++)
{
GridViewRow row;
row = GridView1.Rows[i];
if (row.RowType == DataControlRowType.DataRow)
{
HyperLink link = (HyperLink)row.FindControl("id");
if (((HyperLink)GridView1.Rows[i].Cells[0].Controls[0]).Text == button.CommandName)
{
row.BackColor = System.Drawing.Color.IndianRed;
}
}
}
Я использую button.CommandName для хранения поля идентификатора, которое отлично работает. Я просто не могу найти элемент управления гиперссылкой в сетке внутри поля шаблона.
Я получаю следующую ошибку, которая не имеет для меня смысла
Невозможно привести объект типа «System.Web.UI.DataBoundLiteralControl» к типу «System.Web.UI.WebControls.HyperLink».
Update1 Этот код работает без сбоев, если я не использую поле гиперссылки.
for (int i = 0; i < GridView1.Rows.Count; i++)
{
GridViewRow row;
row = GridView1.Rows[i];
if (row.Cells[0].Text.Equals(button.CommandName))
{
row.BackColor = System.Drawing.Color.IndianRed;
}
}
Если изменить столбец 0 на гиперссылку и изменить соответствующий код, то это не сработает. Очевидно, что чтение неправильной ячейки не является проблемой.
for (int i = 0; i < GridView1.Rows.Count; i++)
{
GridViewRow row;
row = GridView1.Rows[i];
HtmlAnchor anchor = (HtmlAnchor) row.Cells[0].Controls[0];
if ( anchor.InnerText.Equals(button.CommandName))
{
row.BackColor = System.Drawing.Color.IndianRed;
}
}