2012-12-18 61 views
0

外列我要聲明的Page_Load方法數據表(或任何其他方法) ,但未能如願。聲明一個DataTable和添加方法

我想這樣一些事。

Protected void Page_load(object sender ,EventArgs e) 
{ 
// Outside this or any other method 
} 
DataTable dt = new DataTable("testingDt"); 

dt.Columns.Add("Site A"); 
dt.Columns.Add("Site B"); 
dt.Columns.Add("Site C"); 

我可以聲明一個數據表,並添加方法內列,做我想做的事情與他們,但就在想,爲什麼我不能像這樣一些事情。

+2

我認爲這個問題是不是像你們對待它那麼糟糕 – user1884709

回答

1

您可以聲明和實例的方法的數據表外,但你不能添加列或法外執行它的任何opreation。

DataTable dt = new DataTable("testingDt"); // DataTable declared outside 
Protected void Page_load(object sender ,EventArgs e) 
{ 
dtSelectedLinks.Columns.Add("Site A"); //Datatable used inside the method. 
dtSelectedLinks.Columns.Add("Site B"); 
dtSelectedLinks.Columns.Add("Site C"); 
} 
+0

對不起,我把問題匆忙。我可以做這樣的事情。但是我想在方法 – user1884709

+2

@ user1884709之外添加列,你不能那樣做。您只能在方法中添加列 – Habib

+0

對於這種情況,您最好的辦法是什麼。我想有一個dataTable,然後在一些方法中添加行,然後綁定它。 Habib會怎麼做? – user1884709

4

正如哈比卜已經提到的:「你可以聲明和實例的方法的數據表外,但你不能列給它的方法之外的補充。」

增加:我不會在ASP.NET的方法之外,因爲所有的對象都在當前page-lifecycle的端部設置反正聲明它。如果你忘記了這個事實,這會鼓勵討厭的錯誤。

相反,我會用一個有意義的命名方法來初始化並填寫您的DataTable

例如:

public static DataTable GetAllLinks() 
{ 
    DataTable dtSelectedLinks = new DataTable(); 
    // fill it here from database or whatever ... 
    return dtSelectedLinks; 
} 

現在你可以使用它的地方,例如:

Protected void Page_load(object sender ,EventArgs e) 
{ 
    if(!IsPostBack) 
    { 
     gridViewLinks.DataSource = GetAllLinks(); 
     gridViewLinks.DataBind(); 
    } 
} 
0

不能添加列/行等它

DataTable dt; 
Protected void Page_load(object sender ,EventArgs e) 
{ 
    if(!Page.IsPostBack) 
    { 
     myGridView.DataSource=GetData(); 
     myGridView.DataBind(); 
    } 
} 

Private DataTable GetData() 
{ 
    dt = new DataTable("testingDt"); 
    dt.Columns.Add(New DataColumn("S.No",typeof(int))); 
    dt.Columns.Add(New DataColumn("Name",typeof(string))); 
    // Add rows 
    return dt; 
} 
-1

首先,我想指出Tim Schmelter's answer爲對象和ASP.NET生命週期的最佳實踐。直接引用他的話:

我不會在ASP.NET中的方法之外聲明[DataTable],因爲無論如何所有對象都放置在當前頁面生命週期的末尾。如果你忘記了這個事實,這會鼓勵討厭的錯誤。

因此,雖然您的Page可能'具有'DataTable,但ASP.NET設計的方式是它不會保留您的DataTable。那很糟。相反,您只會爲您需要的方法聲明和填充DataTable。

如果你只是希望避免各地複製你的「創建列」代碼不同的方法,你可以在一個單獨的方法添加列,並調用它根據需要,是這樣的:

public void instantiateDataTable(DataTable dt) 
{ 
    dt.Columns.Add(New DataColumn("S.No",typeof(int))); 
    dt.Columns.Add(New DataColumn("Name",typeof(string))); 
}