我有一个带有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>
答案 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页面的代码,我相信我可以帮助您。