5

tblEmployeeMS Visual Studio 2010 (ASP.NET - C#) と MS SQL Server 2005 を使用しており、データベースからテーブル内のすべてのレコードを取得しようとしていますEMPLOYEES。Visual Studio でプログラムをデバッグしてもエラーは発生しませんが、ローカルホストの Web ページを開くと、データグリッドビュー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>

データベースとテーブルの名前は正しく、テーブルにはレコードがあり、両方のプログラムを管理者として実行しています。何が問題なのかわかりません...これは権限に関係していますか?

4

2 に答える 2

5

次のように、グリッドをバインドする必要があります。

dgvEmployee.DataBind();

注: Windows 開発 (WinForms、WPF など) とは異なり、ASP.NET データ コントロールでは、実際にデータをバインドするために明示的な呼び出しが必要です。利点として、ASP.NET でのデータ ソースへの再バインドは、Windows での開発よりもはるかに簡単です。


もう 1 つの問題GridViewは、. 次のように、マークアップで列を明示的に定義するか、プロパティをに設定できます。.DataBind()ColumnsGridViewAutoGenerateColumnsTrue

<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>

注: に設定AutoGenerateColumnsFalseないと、定義済みの列がレンダリングされてから、データ ソース内のすべての列がレンダリングされるため、列が重複することになります。

于 2013-11-13T02:36:55.547 に答える
2

グリッドにデータ ソースを指定した後で、このメソッドを使用します。

dgvEmployee.DataBind()
于 2013-11-13T02:34:33.983 に答える