似乎很容易,但我很难做到这一点。
<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。它还会查看 gridview 中的 id 列,并尝试突出显示已编辑的行。
如果 ID 字段是有界字段并且不是 URL,则代码可以正常工作。但是当它是一个 URL 时,我似乎无法读取 URL 的文本值。我尝试了各种解决方案(来自 SO 和在线的帮助)
超链接链接 = (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 来存储工作正常的 ID 字段。我似乎无法在模板字段内的 gridview 中找到超链接控件。
我收到以下错误,这对我来说没有意义
无法将“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;
}
}