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

正如 Habib已经提到的:

您可以在方法之外声明和实例化数据表,但不能在方法之外向其中添加列。

我不会在 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 回答