1

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");

DataTable を宣言し、メソッド内に列を追加して、好きなことを何でもできますが、なぜこのようなことができないのか考えていました。

4

3 に答える 3

4

ハビブがすでに述べたように

メソッドの外でデータテーブルを宣言してインスタンス化することはできますが、メソッドの外で列を追加することはできません。

とにかく、現在のページのライフサイクルの最後にすべてのオブジェクトが破棄されるため、ASP.NET のメソッドの外では宣言しません。この事実を忘れると、厄介なバグが助長されます。

代わりに、意味のある名前付きメソッドを使用して、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();
    }
}
于 2012-12-18T09:09:05.000 に答える
1

メソッドの外部でデータテーブルを宣言してインスタンス化することはできますが、メソッドの外部で列を追加したり、データテーブルに対して操作を実行したりすることはできません。

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");
}
于 2012-12-18T09:05:57.313 に答える
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;
}
于 2012-12-18T09:11:59.613 に答える