У меня есть простая страница asp netp: Я проектирую gridview с настраиваемым шаблоном заголовка и элемента. Затем я связываю его, и я хотел бы использовать findcontrol для поиска элемента управления в разделе заголовка. Я не получаю ошибку, но findcontrol, кажется, находит, может контролировать в каждой ячейке заголовка.TableCell.FindControl Кажется, чтобы найти мой элемент управления в ячейках, где он не существует
Это моя страница:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TEST.aspx.cs" Inherits="Client.TEST1" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="gv1" runat="server" AutoGenerateColumns="false" OnRowDataBound="gv1_RowDataBound">
<Columns>
<asp:TemplateField>
<HeaderTemplate><asp:Label runat="server" ID="lblName">NAme</asp:Label> </HeaderTemplate>
<ItemTemplate>
<%# Eval("Name") %>
</ItemTemplate>
<ItemStyle Wrap="False" />
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate><asp:Label runat="server" ID="lblSurname">Surname</asp:Label> </HeaderTemplate>
<ItemTemplate>
<%# Eval("Surname") %>
</ItemTemplate>
<ItemStyle Wrap="False" />
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate><asp:Label runat="server" ID="lblCity">City</asp:Label> </HeaderTemplate>
<ItemTemplate>
<%# Eval("City") %>
</ItemTemplate>
<ItemStyle Wrap="False" />
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
</form>
</body>
</html>
Это мой код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace Client
{
public class test
{
public string Name { get; set; }
public string Surname { get; set; }
public string City { get; set; }
}
public partial class TEST1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
List<test> tList = new List<test>();
tList.Add (new test() { Name = "Marco", Surname = "Verdi", City = "Milano" });
tList.Add(new test() { Name = "Giovanni", Surname = "Rossi", City = "Bergamo" });
tList.Add(new test() { Name = "Giacomo", Surname = "Bianchi", City = "Napoli" });
tList.Add(new test() { Name = "Luca", Surname = "Verdi", City = "Roma" });
tList.Add(new test() { Name = "Simone", Surname = "Fede", City = "Palermo" });
tList.Add(new test() { Name = "Riccardo", Surname = "Rossi", City = "Ancona" });
gv1.DataSource = tList;
gv1.DataBind();
gv1.HeaderRow.TableSection = TableRowSection.TableHeader;
}
}
protected void gv1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
for (int Index = 0; Index < gv1.HeaderRow.Cells.Count; Index++)
{
TableCell Cell = gv1.HeaderRow.Cells[Index];
Control C = Cell.FindControl("lblSurname");
if (C != null)
{
Cell.BackColor = System.Drawing.Color.Red;
Response.Write("ROW:" + e.Row.RowIndex.ToString() + " CELL:" + Index.ToString() + "<br/>");
}
}
}
}
}
}
Когда я проверить это, каждая ячейка заголовка красного цвета. Только вторая ячейка должна быть красной.
EDIT: я добавил Response.Write("ROW:" + e.Row.RowIndex.ToString() + " CELL:" + Index.ToString() + "<br/>");
, чтобы показать свою настоящую проблему. if (C != null)
всегда верно для каждой ячейки в каждой строке. Я думаю, что это должно быть верно для строк
Я знаю, что 'BackColor' является общим свойством для всех элементов управления, но я бы бросил его на« Label », прежде чем использовать свойство на нем. Anyways +1 для пятна на. – Rahul
Зачем бросать? Он уже знает, что нашел правильный контроль. –
bakcolor был образцом, мне действительно не нужно менять цвет. Мне нужно найти индекс ячейки, где мой контроль. Проблема заключается в том, что 'if (C! = Null)' истинно для каждой ячейки – maleda