элементы управления форматированием в Page_Load (81 текстовое поле) - PullRequest
0 голосов
/ 11 октября 2009

У меня есть сетка судоку с 81 ячейкой (asp: текстовые поля), которую я пометил: _c11 .._ c12 .._ c13 .._ c99 Я пытаюсь отформатировать текстовые поля при загрузке страницы. Текущий код, который у меня есть, возвращает 81 элемент управления, но когда я делаю форматирование в последнем цикле, он дает мне нулевую ссылку. Извините за мое ужасное кодирование .. пожалуйста:)

ArrayList sudokuCells = new ArrayList();
        for(int i = 11; i < 100; i++)
        {
            if (i == 20 || i == 30 || i == 40 || i == 50 || i == 60 || i == 70 || i == 80 || i == 90)
                continue;
            else
            {
                TextBox cell = (TextBox)Page.FindControl("_c" + i.ToString());
                sudokuCells.Add(cell);
            }
        }

        _c11.Text = sudokuCells.Count.ToString();


        foreach (TextBox cell in sudokuCells)
        {
            cell.ForeColor = System.Drawing.Color.Red;
            cell.MaxLength = 1;
        }

это в page_load, я не совсем, почему он дает мне нулевую ссылку, потому что я ссылаюсь на все элементы управления textbox в ячейке, а затем добавляю эту ссылку в массив.

Очевидно, что я что-то упускаю. Кто-нибудь, пожалуйста, просветите меня?

ОК. Page.FindControl ("_ c11") возвращает ноль; хотя они определены на моей странице aspx.

<%@ Page Title="" Language="C#" MasterPageFile="~/Site1.Master" AutoEventWireup="true"            CodeBehind="Content.aspx.cs" Inherits="Sudoku.Content" %>
<asp:Content ID="_content1" ContentPlaceHolderID="head" runat="server">
<link rel="stylesheet" type="text/css" href="styles/style.css" />
 </asp:Content>
  <asp:Content ID="_content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
  <div id="wrapper">
   <table cellpadding="0" cellspacing="0" class="sudokuTable">
    <tr>

        <td class="column1NoBottomBorder"><asp:TextBox ID="_c11" runat="server" CssClass="sudokuCell"></asp:TextBox></td>
        <td class="column2NoBottomBorder"><asp:TextBox ID="_c12" runat="server" CssClass="sudokuCell"></asp:TextBox></td>
        <td class="column3NoBottomBorder"><asp:TextBox ID="_c13" runat="server" CssClass="sudokuCell"></asp:TextBox></td>
        <td class="column4NoBottomBorder"><asp:TextBox ID="_c14" runat="server" CssClass="sudokuCell"></asp:TextBox></td>
        <td class="column5NoBottomBorder"><asp:TextBox ID="_c15" runat="server" CssClass="sudokuCell"></asp:TextBox></td>
        <td class="column6NoBottomBorder"><asp:TextBox ID="_c16" runat="server" CssClass="sudokuCell"></asp:TextBox></td>
        <td class="column7NoBottomBorder"><asp:TextBox ID="_c17" runat="server" CssClass="sudokuCell"></asp:TextBox></td>
        <td class="column8NoBottomBorder"><asp:TextBox ID="_c18" runat="server" CssClass="sudokuCell"></asp:TextBox></td>
        <td class="column9NoBottomBorder"><asp:TextBox ID="_c19" runat="server" CssClass="sudokuCell"></asp:TextBox></td>
    </tr>
    <tr>

Ответы [ 2 ]

1 голос
/ 11 октября 2009

Метод FindControl находит только прямые дочерние элементы контейнера, для которого он вызван.

В вашем случае «Страница», вероятно, содержит только один элемент управления: элемент управления формой, поэтому текстовое поле не найдено, и вы получаете нулевую ссылку.

Посмотрите на свой код впереди (страница aspx), чтобы найти серверный элемент управления asp, содержащий текстовые поля. Это может быть панель? Или текстовые поля прямо в элементе управления формы?

Если текстовые поля находятся на панели с идентификатором "pnlBoxes", например, вы бы вызвали "FindControl" на этой панели:

pnlBoxes.FindControl ("_ c" + i.ToString ())

Если это не поможет, возможно, вы можете опубликовать код своей страницы aspx, и я уверен, что смогу вам помочь.

1 голос
/ 11 октября 2009

FindControl возвращает ноль где-то в вашем первом цикле. Кроме того:

if (i == 20 || i == 30 || i == 40 || i == 50 || i == 60 || i == 70 || i == 80 || i == 90)

Как насчет

if (i % 10 == 0)
  continue;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...