Page_Load上方有以下代碼
public DataTable dtDetail=new DataTable();Page_Load中以下代碼
private void Page_Load(object sender, System.EventArgs e)
{
// Initial
if (!IsPostBack)
{
InitdtDetail();
}
}InitdtDetail中以下代碼
private void InitdtDetail()
{
DataColumn dcDetail; //Add Column CUST_ID
dcDetail=new DataColumn();
dcDetail.DataType=System.Type.GetType("System.String");
dcDetail.Caption="CUST_ID";
dcDetail.ColumnName="CUST_ID";
dtDetail.Columns.Add(dcDetail);
}另一個函數中有以下代碼:
private bool ValidateHdDetail()
{
bool blnValidation=true;
string strCust_ID="CC0005"; DataRow drowd = dtDetail.NewRow();
drowd["CUST_ID"] = strCust_ID;
dtDetail.Rows.Add(drowd); return blnValidation;
}運行到drowd["CUST_ID"] = strCust_ID;這句出錯,“資料行 'CUST_ID' 不屬於資料表 。”需要怎麼修改代碼??我知道兩段代碼可以合併在一起,但是由於這是簡化了代碼,實際需求中ValidateHdDetail比較複雜。為了通用,只能將兩段代碼分開寫。

解决方案 »

  1.   

    那你在调用ValidateHdDetail之前,调用一下InitdtDetail
      

  2.   

    实际上在你页面刷新的时候
    程序会先调用
    public DataTable dtDetail = new DataTable();
    所以再执行
    ValidateHdDetail这时候dtDetail 是个空表
      

  3.   

    postback后,变量不会保留,所以如果发生了回传,dtDetail 就是个空表如果希望把dtDetail一直保留,可以把它放在ViewState或者Session里 
    private void Page_Load(object sender, System.EventArgs e)
    {
    // Initial
    if (!IsPostBack)
    {
    InitdtDetail();
                       ViewState["dtDetail"] = dtDetail;  
    }
             else
          {
             dtDetail = ViewState["dtDetail"] as DataTable;
          }
    }
      

  4.   

    多謝各位大俠幫忙。按照fengfangfang() 或者Eddie005(♂) 暴赱 『零零伍』(︶︵︶)的方法修改,在ValidateHdDetail中不會出錯了,但是還是有個問題。我按鈕中的代碼是
    private void btnOK_Click(object sender, System.EventArgs e)
    {
    if (ValidateHdDetail())
    {
    this.DataGridQuery.DataSource = dtDetail.DefaultView; this.DataGridQuery.DataBind();
    }
    }運行到
    this.DataGridQuery.DataSource = dtDetail.DefaultView;
    這句時出現錯誤提示:
    並未將物件參考設定為物件的執行個體