2009-10-10 26 views
0

我有一個數獨網格,包含81個單元格(asp:textboxes),我標記爲:_c11 .._ c12 .._ c13 .._ c99 我試圖格式化文本框頁面加載。目前的代碼,我將返回81所控制,但是當我在最後一個循環做格式化它給我一個空引用錯誤.. 原諒我糟糕的編碼..請:)Page_Load上的格式化控件(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中,我不完全是爲什麼它給了我一個空引用,因爲我引用單元格中的所有文本框控件,然後將該引用添加到數組列表。

顯然,我錯過了一些人會請教育我?

好的.. 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> 

回答

1

FindControl方法只能認定這就是所謂的容器的直接子。

在你的情況下,「頁面」可能只包含一個控件:表單控件,這就是爲什麼找不到文本框並且你得到一個空引用。

查看您的代碼前置(aspx頁面)以查找包含文本框的asp服務器控件。這可能是一個小組?或者是直接在窗體控件中的文本框?

如果文本框的id爲 「pnlBoxes」 在面板中,例如,你會打電話 「的FindControl」 該面板上:

pnlBoxes.FindControl( 「_ C」 + i.ToString())

如果這沒有幫助,也許你可以發佈你的aspx頁面的代碼,我相信我可以幫助你。

+0

我已經添加了我的aspx頁面stefan。 – jr3

+0

Stefan,我用面板包圍了我的桌子,並從面板控件調用了.FindControl,現在一切正常。謝謝! – jr3

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; 
+0

仍然是相同的結果。 – jr3

+0

我沒想到我的if語句會有所幫助,只是認爲它會讓你的代碼更清潔:) 試試這個: TextBox cell =(TextBox)Page.FindControl(「_ c」+ i.ToString()) ;如果(cell == null){ }拋出新的異常 } – aquinas

+0

感謝您的幫助aquinas! – jr3