2015-05-24 4 views
0

У меня есть простая страница 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) всегда верно для каждой ячейки в каждой строке. Я думаю, что это должно быть верно для строк

ответ

1

Компьютеры обычно делают то, что мы просим их делать. Если они что-то делают, мы не хотим, чтобы они это делали, тогда мы, вероятно, просим их сделать то, что мы не хотим, чтобы они делали.

Использование

C.BackColor = System.Drawing.Color.Red; 

Вы использовали Cell.BackColor, поэтому установка каждый цвет ячейки на красный.

+0

Я знаю, что 'BackColor' является общим свойством для всех элементов управления, но я бы бросил его на« Label », прежде чем использовать свойство на нем. Anyways +1 для пятна на. – Rahul

+0

Зачем бросать? Он уже знает, что нашел правильный контроль. –

+0

bakcolor был образцом, мне действительно не нужно менять цвет. Мне нужно найти индекс ячейки, где мой контроль. Проблема заключается в том, что 'if (C! = Null)' истинно для каждой ячейки – maleda

0

Ваш код выполняет итерацию по каждой строке таблицы, каждый раз, когда строка привязана к данным, что необязательно. Кроме того, если вы используете элемент управления в заголовке, тогда вы должны проверить тип заголовка, а не строку данных, и я бы предложил вызвать элемент управления find только в связанной строке. Попробуйте это вместо этого:

protected void gv1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.Header) 
     { 
      Label l = (Label)e.Row.FindControl("lblSurname"); 
      if (l != null) 
      { 
       l.BackColor = System.Drawing.Color.Red; 
      } 
     } 
    } 
+0

i knowit, но моя проблема заключается в том, чтобы выяснить, почему 'if (C! = Null)' истинно для каждой ячейки. Я использую DataRow, потому что на моей реальной странице я должен перебирать каждую строку, читать данные som из базы данных и, наконец, модифицировать некоторую ячейку – maleda

+0

По соображениям совместимости в заголовке заголовка db i can not или имени поля dotabound. я мог найти другое обходное решение, но я хотел бы понять, почему это не работает. – maleda

+0

Да, я не получил весь ваш вопрос. Я не знаю, почему это так. Я скажу, что FindControl абсолютно сосет. Если вы можете как-то не использовать его, тогда не делайте этого. – sovemp

 Смежные вопросы

  • Нет связанных вопросов^_^