Page_Load上的格式控件(81个文本框)

时间:2009-10-10 23:23:26

标签: c# asp.net user-controls

我有一个带有81个单元格的aspoku网格(asp:textboxes),我已将其标记为:_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中,我不完全是为什么它给我一个空引用,因为我引用了单元格中的所有文本框控件,然后将该引用添加到arraylist。

显然,我遗失了某些人,请教育我吗?

Ok .. Page.FindControl(“_ c11”)返回null;即使我在我的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 个答案:

答案 0 :(得分:1)

FindControl在第一个循环中的某处返回null。也:

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

怎么样

if (i % 10 == 0)
  continue;

答案 1 :(得分:1)

FindControl方法只查找调用它的容器的直接子节点。

在您的情况下,“Page”可能只包含一个控件:表单控件,这就是找不到文本框的原因,并且您获得了空引用。

查看前面的代码(aspx页面)以查找包含文本框的asp服务器控件。它可能是一个小组吗?或者直接在表单控件中的文本框?

例如,如果文本框位于ID为“pnlBoxes”的Panel中,您将在该面板上调用“FindControl”:

pnlBoxes.FindControl(“_ c”+ i.ToString())

如果这没有帮助,也许您可​​以发布您的aspx页面的代码,我相信我可以帮助您。