Datagridview未显示在网页中

时间:2013-11-13 02:31:03

标签: c# asp.net sql sql-server datagridview

我正在使用MS Visual Studio 2010(ASP.NET - C#)和MS SQL Server 2005,我正在尝试从我的数据库tblEmployee中检索表EMPLOYEES中的所有记录。在Visual Studio中调试程序时没有错误,但是当localhost网页打开时,datagridview dgvEmployee不存在。也没有检索到的记录。这是我的代码:

SqlConnection sConn;
SqlDataAdapter daEmp;
DataSet dsEmp;

const string sStr = "Server = Server-PC\\SQLEXPRESS; Database = EMPLOYEES; Integrated Security = SSPI";

protected void Page_Load(object sender, EventArgs e)
{
    sConn = new SqlConnection(sStr);
    daEmp = new SqlDataAdapter("SELECT * FROM tblEmployee", sConn);
    dsEmp = new DataSet();

    daEmp.Fill(dsEmp, "tblEmployee");

    dsEmp.Tables["tblEmployee"].PrimaryKey = new DataColumn[] { dsEmp.Tables["tblEmployee"].Columns["EmployeeID"] };

    dgvEmployee.DataSource = dsEmp.Tables["tblEmployee"];
}

这是我的Defaultpage.aspx中的代码:

<asp:GridView ID="dgvEmployee" runat="server">
</asp:GridView>

数据库和表名是正确的,表有记录,我正在以管理员身份运行这两个程序。我只是无法弄清楚出了什么问题......这与权限有关吗?

2 个答案:

答案 0 :(得分:5)

您需要绑定网格,如下所示:

dgvEmployee.DataBind();

注意:与Windows开发(WinForms,WPF等)不同,ASP.NET数据控件需要显式调用才能实际绑定数据。从好的方面来说,重新绑定到ASP.NET中的数据源要比Windows开发更容易。


您将遇到的另一个问题是,根据您为GridView发布的标记,实际调用.DataBind()后您将无法获得任何数据,因为您没有{{1}在Columns中定义。您可以在标记中明确定义列,也可以将GridView属性设置为AutoGenerateColumns,如下所示:

True

注意:使用<asp:GridView ID="dgvEmployee" runat="server" AutoGenerateColumns="True"> </asp:GridView> 路径,将获取数据源中的确切列名称,并将其用作网格中的标题;因此,如果您有包含下划线或缩写的列(例如AutoGenerateColumns="True"AVG_COST),那么它们将在输出中显示与下划线完全相同的列。如果您只想将数据转储到网格中,则此方法很有用。

要控制列的名称,必须明确定义网格的列,如下所示:

CUSTOMER_ID

注意:将<asp:GridView ID="dgvEmployee" runat="server" AutoGenerateColumns="False"> <Columns> <asp:BoundField datafield="CustomerID" headertext="Customer ID"/> <asp:BoundField datafield="CompanyName" headertext="Company Name"/> <asp:Boundfield datafield="Address" headertext="Address"/> </Columns> </asp:GridView> 设置为AutoGenerateColumns,否则最终会出现重复的列,因为它会呈现您定义的列,然后呈现数据源中的所有列。

答案 1 :(得分:2)

将数据源提供给网格后使用此方法。

dgvEmployee.DataBind()