我想在 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并在方法中添加列,并根据需要做任何我想做的事情,但我在想为什么我不能做这样的事情。
答案 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)));
}