【问题标题】:Datagridview not showing up in webpageDatagridview 未显示在网页中
【发布时间】:2013-11-25 11:37:30
【问题描述】:

我正在使用 MS Visual Studio 2010 (ASP.NET - C#) 和 MS SQL Server 2005,我正在尝试从我的数据库 EMPLOYEES 中检索表 tblEmployee 中的所有记录。在 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>

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

【问题讨论】:

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


    【解决方案1】:

    你需要绑定网格,像这样:

    dgvEmployee.DataBind();
    

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


    您将遇到的另一个问题是,根据您为GridView 发布的标记,一旦您实际调用.DataBind(),您将不会获得任何数据,因为您的@ 中没有定义Columns 987654325@。您可以在标记中显式定义列,也可以将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 否则最终会出现重复的列,因为它将呈现您定义的列,然后是数据源中的所有列。

    【讨论】:

    • 谢谢,这很有帮助。它现在正在工作。您是否也知道如何更改列的标题名称?此代码似乎不起作用:dgvEmployee.Columns[0].HeaderCell.Value = "Employee ID";
    • @user2971155 - 查看更新的答案,对不起,我写的比我想象的要多,花了一些时间来更新。 :-)
    【解决方案2】:

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

    dgvEmployee.DataBind()
    

    【讨论】:

    • 如果您解决了问题,请接受此答案,并针对您遇到的列名问题打开另一个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-22
    • 2014-02-07
    • 2010-09-28
    • 2020-06-14
    相关资源
    最近更新 更多