程序化Gridview理解

时间:2011-10-12 19:15:28

标签: c# asp.net gridview

这可能是一个相当简单的问题,但我似乎无法找到我正在寻找的答案。

我一直在以编程方式使用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同样的结果)?这肯定有助于我对这个过程的全面理解。我只是不明白为什么它会与一个完美的工作而不是另一个工作。

感谢您提供任何信息。

1 个答案:

答案 0 :(得分:2)

你不应该在GridView上做一个'new',只需填充它的DataSource并调用DataBind。页面引用的对象在函数调用中被覆盖,因此无法显示。