none
用 C# 寫的CheckBox 功能 RRS feed

  • 問題

  •  

    請問 於 C#  及 .NET 1.0 環境下

    用以下程式碼 來寫出 陣列的CHECKBOX

     

    但 結果卻出現

    this.children.0.id 是null 或 不是物件

     

    請問,這應該如何解決...

    不好意思,初學,又不清楚該如何用.....

    麻煩了! 謝謝!

    Code Snippet

    public class udcSecTable : System.Web.UI.WebControls.Table
     {
      private string strWeekDays = "一二三四五六日" ;
      public int intDayPeriods = 17 ;

      public System.Web.UI.WebControls.Literal DebugMsg ;

      public System.Web.UI.WebControls.CheckBox[] chkArray ;

      public udcSecTable ()
      {
       // Configure Table
       this.BorderWidth=1 ;
       this.CellPadding = 0 ;
       this.CellSpacing = 1 ;

       int intTotalPeriods = this.strWeekDays.Length * this.intDayPeriods ;

       // Build CheckBox Array
       this.chkArray = new System.Web.UI.WebControls.CheckBox[intTotalPeriods] ;

    HttpContext.Current.Response.Write("-----A----->"+this.chkArray.Length );


       for (int nArray = 0; nArray < intTotalPeriods; nArray++)
       {
        int nDay = (nArray / intDayPeriods) ;
        int nPeriod = nArray - (nDay) * intDayPeriods + 1 ;

        string strOptionText
         = ("一二三四五六七").Substring(nDay, 1) + "("
         + nPeriod.ToString().Replace("13", "A").Replace("14", "B").Replace("15", "C").Replace("16", "D").Replace("17", "E") + ")" ;
        string strOptionValue = ((++nDay) * 100 + nPeriod).ToString() ;    


       
    HttpContext.Current.Response.Write("-----B----->"+this.chkArray.Length );
        

        chkArray[nArray] = new CheckBox() ;
        chkArray[nArray].ID = "chkArray" + ("000" + nArray.ToString()).Substring(nArray.ToString().Length, 3) ;
        chkArray[nArray].Attributes["OptionIndex"] = nArray.ToString() ;
        chkArray[nArray].Attributes["OptionText"] = strOptionText ;
        chkArray[nArray].Attributes["OptionValue"] = strOptionValue ;
        chkArray[nArray].Attributes["onClick"] = "__doPostBack(this.children[0].id, this.children[0].checked) ;" ;
        //chkArray[nArray].Attributes["onClick"] = "__doPostBack(this.chkArray.id, this.chkArray.checked) ;" ;
     
          
       }

       // Build & Visualize Table
       for (int nRow = 0; nRow < 19; nRow++)
       {
        System.Web.UI.WebControls.TableRow oRow = new System.Web.UI.WebControls.TableRow() ;
        for (int nColR = 0; nColR < 10; nColR++)
        {
         int nCol = 9 - nColR ;
         System.Web.UI.WebControls.TableCell oCell = new System.Web.UI.WebControls.TableCell() ;
         switch (nRow)
         {
          case 0:
          case 18:
           oCell.Text = (" 一二三四五 六日 ").Substring(nCol, 1) ;
           oCell.Text = (" 一二三四五 六日 ").Substring(nCol, 1) ;
           break ;
          default:
           int nArray ;
          switch (nCol)
          {
           case 0:
           case 6:
           case 9:
            if (nRow <= 12)
            {
             oCell.Text = nRow.ToString() ;
            }
            else
            {
             oCell.Text = ("ABCDE").Substring(nRow - 13, 1) ;
            }
            break ;
           case 7:
           case 8:
            nArray = (nCol - 2) * 17 + nRow - 1 ;
            oCell.Controls.Add(this.chkArray[nArray]) ;
            break ;
           default:
            nArray = (nCol - 1) * 17 + nRow - 1 ;
            oCell.Controls.Add(this.chkArray[nArray]) ;
            break ;
          }//switch (nCol)
           break ;
         }//switch (nRow)
         switch (nCol)
         {
          case 1:
          case 2:
          case 3:
          case 4:
          case 5:
           if ((nRow >= 1) && (nRow <= 4))
           {
            oCell.BackColor = System.Drawing.Color.FromArgb(255, 160, 160) ;
           }
           if ((nRow >= 5) && (nRow<= 8))
           {
            oCell.BackColor = System.Drawing.Color.FromArgb(255, 255, 160) ;
           }
           if ((nRow >= 9) && (nRow <= 12))
           {
            oCell.BackColor = System.Drawing.Color.FromArgb(160, 255, 160) ;
           }
           if ((nRow >= 13) && (nRow <= 17))
           {
            oCell.BackColor = System.Drawing.Color.FromArgb(160, 160, 255) ;
           }
           break ;
          case 7:
          case 8:
           if ((nRow == 0) || (nRow == 18))
           {
           }
           else
           {
            oCell.BackColor = System.Drawing.Color.FromArgb(160, 255, 255) ;
           }
           break;
          default:
           break;
         }//switch (nCol)
         oCell.HorizontalAlign = System.Web.UI.WebControls.HorizontalAlign.Center ;
         oRow.Cells.Add(oCell) ;
        }//for (int nCol = 0; nCol < 10; nCol++)
        this.Rows.Add(oRow) ;

       }// Build Table: for (int nRow = 0; nRow < 19; nRow++)

      }//public udcSecTable ()
     }
    }

     

     


     

    2008年5月16日 上午 12:42

所有回覆

  • this.children[0].id 抓不到,你改成這樣看看。

     

    Code Snippet

     

    chkArray[nArray].Attributes["onClick"] = "__doPostBack('" + chkArray[0].ID + "', " + chkArray[0].ID + ".checked) ;" ;

     

     

     

     

    2008年5月16日 上午 01:18
  •  

    謝謝!

    目前這樣改 就不會出現ERROR

    但抓的資料  點選後, 有些抓的到,有些抓不到.. 且抓到的都是同一個....

     

    目前,有發現另一個新的問題點

    原本的程式 是在 2000Server 上  + .Framework 1.0 ==>可以Run

    但 改裝到 2003Server 上後 ,因為 2003Server 為 .Framework 1.1

    所以 就有些 程式碼 無法正常執行了!

    想請問 是否有辦法 於 2003SERVER下 RUN .Framework 1.0呢

    因為 有試過  2003SERVER 下 .Framework 1.1 降到 .Framework 1.0

    仍無法正常執行....

     

    麻煩了!

    謝謝

    2008年5月16日 上午 03:07
  • 有些抓的到,有些抓不到

     問題解決了!

     

    但 版本問題仍無法解決!

    不知是否有解決之道??

     

     

    2008年5月20日 上午 03:59
  • 您可以檢查您的Web.config, 看看裡面引用到的元件是不是1.0? 如果是,改成1.1看看.

     

     另, 您出錯的地方為何?

    2008年5月20日 上午 06:28
    版主
  •  

    謝謝 您!

    不想請問 您說! Web.config 引用到的元件1.0

    請問 要哪各ELEMENT

    目前 整個 專案裡面的WEB.CONFIG 似乎找不到 1.0  或1.1的字眼

     

    另外 出錯的地方

    因該是說目前 USER 表示之前程式可以用

    在換過 環境後,就不可用了

     

    其他同事 是說 WIN2003 的.FRAMEWORK 問題

    他只好把之前的程式 遇到 BUG的地方,一一修訂!

    2008年5月21日 上午 08:12