web-dev-qa-db-ja.com

ASP.netはプログラムでデータセットをgridviewにバインドします

約15列のデータセットがあり、ASP.netグリッドビューもあります。グリッドビューにデータセットを入力する方法を誰かが知っているかどうか疑問に思っていましたが、問題は、データセットからいくつかの列が必要なことです。

現時点では私はちょうどやっています

    GridView1.DataSource = ds;
    GridView1.DataBind();

しかし、これは明らかにデータセットからグリッドビューにすべての列をバインドします。

6
c11ada

それで、実行時に列を作成しようとしていますか?これを試して:

http://www.codeproject.com/KB/aspnet/dynamic_Columns_in_Grid.aspx

または、aspxで事前にグリッドビューを構成することもできます。

<Columns> 
    <asp:BoundField DataField="ProductName" HeaderText="Product" SortExpression="ProductName" />
    <asp:BoundField DataField="CategoryName" HeaderText="Category" ReadOnly="True" SortExpression="CategoryName" />
    <asp:BoundField DataField="UnitPrice" DataFormatString="{0:c}" HeaderText="Price" HtmlEncode="False" SortExpression="UnitPrice" />
</Columns>

そして、必ず AutoGenerateColumns をfalseに設定してください。

10
Kon

デフォルトでは、GridViewは、バインドされているデータに基づいてすべての列を自動的に生成します。

GridView.AutoGenerateColumns = falseを設定してから、GridView.Columnsプロパティを使用して必要な列を定義します。

7
KP.

何を変更できるか、そして何をそのままにしておく必要があるかに応じて、これを行うために私が見ることができる2つの方法:

1)データセットを生成するクエリ/プロシージャを制御でき、他のグリッド/ページに悪影響を与えることなく実行できる場合は、使用する列のみを選択するようにクエリを変更します。 JOINとWHEREで選択されていない列を引き続き使用でき、すべての列をORDERBYに追加する必要がないという追加のボーナスが得られます。

2)グリッドとそれを生成するために使用されるコードビハインドのみを制御できる場合は、DataGridパラメーターとしてAutoGenerateColumns = falseを設定し、表示する必要のあるBoundFieldsをDataGrid内にネストできます。これにより、フォーマット、列名の作成なども可能になります。

これらの両方を実行できる場合は、グリッドの読み込みも速くなります。

2
John Dunagan

グリッドのAutoGeneratedColumnsをfalseに設定し、グリッドビューデザイナまたはコードで使用する列を設定します。ただし、列のDataFieldプロパティを次の名前と同じに設定する必要があります。

1
Bassetassen
SqlCommand comm = new SqlCommand("Select required fields from YourTable, conn);

conn.Open();
SqlDataReader rdr = comm.ExecuteReader();

GridView1.DataSource = rdr;
GridView1.DataBind();

rdr.Close();

これにより、必須フィールドのみが印刷されます。

0
Naresh