日期:2014-05-17  浏览次数:20546 次

超难绘制表格问题,后台代码任意控制前台TABLE控件
我封装了一个类,其中有个函数是需要搜索前台网页中给定ID的控件获取并控制
这个类的功能就是根据提供的字符串型ID,搜索前台网页并找到这个控件,控制其绘制表格
有以下关联文件:
// App_Code\ExcelData.cs
public class ExcelData : System.Web.UI.Page// 继承
{
  public bool DrawTable(string f_drawLabel,string f_drawTable)
  {
    System.Web.UI.Control drawLabel = Page.FindControl(f_drawLabel);// 绑定标签控件
    System.Web.UI.Control drawTable = Page.FindControl(f_drawTable);// 绑定表格控件
    ((System.Web.UI.WebControls.Label)drawLabel).Text = f_TableHead.Title;
    ((System.Web.UI.WebControls.Table)drawTable).Controls.Add(drawRow);
  }
}

test.aspx
<asp:Label ID="Label_Title" runat="server" />
<asp:Table ID="Table1" runat="server" width="100%" height="100%" CellPadding="0" CellSpacing="0" />

test.aspx.cs
public ExcelData ExcelData = new ExcelData();
ExcelData.DrawTable("Label_Title","Table1");

按照上面调用提示“未将对象引用设置到对象的实例。”

而我在 test.aspx.cs 中重新声明了一遍 DrawTable() 并直接调用就正常了
所以我在考虑是不是 ((System.Web.UI.WebControls.Table)drawTable).Controls.Add(drawRow); 这个方法哪里写的不对,怎么能让其在公共类中封装后依然可用呢?有什么办法可以直接按照给定的字符串ID搜到并控制控件?
或者说 System.Web.UI.Control drawLabel = Page.FindControl(f_drawLabel); 这个搜索有问题?


控件 页面调用? Table

------解决方案--------------------
你可以试试直接把控件传递过来而不是在类内部解决它,例如这样:

public bool DrawTable(System.Web.UI.WebControls.Label f_drawLabel, System.Web.UI.WebControls.Table f_drawTable)
{
}