这可能是一个相当简单的问题,但我似乎无法找到我正在寻找的答案。
我一直在以编程方式使用GridView控件,从后面的代码中的数据集加载它。所以这是一个相当简单的过程,实例化一个新的Gridview,加载数据集,绑定数据,然后加载控件。
但是,我遇到了一个无法从代码直接加载到GridView的问题。在.aspx文件中我有一个简单的:
<asp:GridView ID="Supp_Data" runat="server" />
在我创建的GridView背后的代码如下:
Supp_Data = new GridView();
Supp_Data = OutsideClass.GetData(str_sql);
//Add other features here (such as AllowSorting, GridLines, PageSize, etc.)
Supp_Data.DataBind();
在我的课堂上:
public static GridView GetData(string str_sql)
{
// string str_sql is simply the sql query that we will get the dataset with.
OdbcConnection dbc_conn = ODBC_Conn(""); //This simply instantiates the connection
OdbcCommand dbc_cmd = null;
OdbcDataAdapter dbc_adpt = null;
DataSet dta_ds = new DataSet();
GridView ret_val = new GridView();
try
{
if (dbc_conn.State != System.Data.ConnectionState.Open) { dbc_conn.Open(); }
dbc_cmd = new OdbcCommand(str_sql, dbc_conn);
dbc_adpt = new OdbcDataAdapter(dbc_cmd);
dbc_adpt.Fill(dta_ds);
ret_val.DataSource = dta_ds;
ret_val.DataBind();
dbc_conn.Close();
}
catch (Exception e)
{
string tst_msg = e.Message;
}
return ret_val;
}
但这根本不显示网格。
现在,作为一种解决方法(显示数据),在.aspx文件中添加PlaceHolder并使用PlaceHolder.Controls.Add(Supp_Data)显示数据就好了。
所以我的实际问题是, 为什么数据不会显示在GridView中,但是在PlaceHolder中显示没有问题? 它是否有事情要做我正在忽略的页面生命周期(我尝试使用Page_Load和Page_Init同样的结果)?这肯定有助于我对这个过程的全面理解。我只是不明白为什么它会与一个完美的工作而不是另一个工作。
感谢您提供任何信息。
答案 0 :(得分:2)
你不应该在GridView上做一个'new',只需填充它的DataSource并调用DataBind。页面引用的对象在函数调用中被覆盖,因此无法显示。