声明DataTable并在方法外添加列

时间:2012-12-18 09:04:40

标签: c# asp.net

我想在 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 个答案:

答案 0 :(得分:4)

正如Habib已经提到的那样:"您可以在方法之外声明和实例化数据表,但是您不能在方法之外添加列。"

另外:我不会在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();
    }
}

答案 1 :(得分: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");
}

答案 2 :(得分: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;
}

答案 3 :(得分:-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)));
}