我正在使用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>
数据库和表名是正确的,表有记录,我正在以管理员身份运行这两个程序。我只是无法弄清楚出了什么问题......这与权限有关吗?
答案 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()