5

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

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>

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

4

2 回答 2

5

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

dgvEmployee.DataBind();

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


GridView您将遇到的另一个问题是.DataBind(),根据您ColumnsGridView. 您可以在标记中显式定义列,也可以将AutoGenerateColumns属性设置为True,如下所示:

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

注意:使用AutoGenerateColumns="True"路由,将从您的数据源中获取确切的列名并将它们用作网格中的标题;因此,如果您的列带有下划线或缩写(即AVG_COSTCUSTOMER_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为,False否则您将得到重复的列,因为它将呈现您定义的列,然后呈现数据源中的所有列。

于 2013-11-13T02:36:55.547 回答
2

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

dgvEmployee.DataBind()
于 2013-11-13T02:34:33.983 回答