トップ回答者
CSVデータ取得後のGRIDVIEWへの取り込み方について

質問
-
お知恵をお貸しください。
ASP4+C#にて、勉強を行っております。
GridViewへのデータとして、CSVファイルを取り込み、データソースを割り当て、バインドし、見ることはできました。
(GriDViewには、設定を行っておらず、CSVファイルのまま出力されます)
ここで、列名を追加編集して、出力を考えていますが、列のプロパティにあるDataFieldに何を入れればよいか、
迷っています。ぜひ、アドバイスをお願いします。
a.aspx.cs 部は、下記です。
protected DataTable set_DT = new DataTable();
public string[] headers;protected void _Reader()
{string ini_file = @"c:/Web_Server/dumy.ini";
// open the file "data.csv" which is a CSV file with headersusing (CsvReader csv = new CsvReader(
new StreamReader(ini_file), true))
{
int fieldCount = csv.FieldCount;
headers = csv.GetFieldHeaders();DataRow dr;
DataColumn dc;
for (int i = 0; i < fieldCount; i++)
{
dc = new DataColumn(headers[i], typeof(String));
set_DT.Columns.Add(dc);
}while (csv.ReadNextRecord())
{
dr = set_DT.NewRow();
for (int i = 0; i < fieldCount; i++)
{
dr[headers[i]] = csv[i];
}
set_DT.Rows.Add(dr);
}GridView.DataSource = set_DT;
GridView.DataBind();
}}
a.aspx部は、下記です。
<asp:GridView ID="GridView" runat="server" BackColor="White" BorderColor="#999999">
<Columns>
<asp:BoundField DataField="<%= headers[0]%>" HeaderText="追加行1" />
<asp:BoundField DataField="<%= headers[1]%>" HeaderText="追加行2" />
<asp:BoundField DataField="<%= headers[2]%>" HeaderText="追加行3" />
</Columns>
</asp:GridView>ここま。
<Columns>を入れると、表示されなくなりました。
DataField="<%= headers[0]%>" ここの正しい、当て方をお教えください。
CSVデータは、3列です。
お願いいたします。
回答
-
DataField="<%= headers[0]%>" のようにはできませんので、そこには DataTable
の各 Column の ColumnName を手書きで記入するほかありません。他には、以下の方法があると思います。
(1) DataTable の各 Column の ColumnName を書き換えてからバインドする。
(2) TemplateField を使用する。
(3) Page.Load イベントのハンドラで動的に BoundField を生成し、その各
プロパティ(HeaderText, DataTextField など)を設定し、GridView
に追加する。
(4) GridView.RowCreated イベントのハンドラで書き換える。ただし、
> 目的は、ページ内に固定項目表があり、そこに複数のCSVデータを動的に張り替え
> たい為です。このあたり、依然として理解できませんので、目的に適うかどうかわかりませんが。
また、> 合わせて、動的に編集を行い、編集後に”適用ボタン”でCSVに書き戻しを考えて
> います。これは、どのようにすれば可能か見通しを立ててから、全体的な構成を考えた方がい
いと思います。ひょっとしたら、最初から無理なことをしているかもしれません。- 回答としてマーク Itumi 2011年9月1日 0:13
すべての返信
-
返信が遅くなりました。
GridViewの編集で列追加した項目への割り付けを考えています。
現在は、GridViewに追加設定を行わず(貼っただけ)、DataTableをバインドすると、
CSVで書いた通り出力されます。(これは、これで良いのですが・・。)
このままだと、面白くないので、1列目には、名前を”設定1”、2列目には、”設定2”の様に決めて(ASPX側 下記Columns追加)
CSVのデータを割り当てることが出来ないかをお教えください。
(a.aspx)
<Columns>
<asp:BoundField DataField=”CSVデータの1項目目” HeaderText="設定1" />
<asp:BoundField DataField=”CSVデータの2項目目” HeaderText="設定2" />
</Columns>そもそもの使い方として、間違っているのでしょうか?
-
ご返信ありがとうございます。調べてみたところ、
GridViewのAutoGenerateColumns は、trueになっていました。
CSVデータをそのまま張り付ける、コードは、上記質問の中で、有効に働いています。
for (int i = 0; i < fieldCount; i++)
{
dc = new DataColumn(headers[i], typeof(String));
set_DT.Columns.Add(dc);
}while (csv.ReadNextRecord())
{
dr = set_DT.NewRow();
for (int i = 0; i < fieldCount; i++)
{
dr[headers[i]] = csv[i];
}
set_DT.Rows.Add(dr);
}これを、そのままGridViewに張ることは可能でした。
今回の質問は、意図的に定義したColumへのデータ貼り付けができなくて困っています。
(a.aspx)
<Columns>
<asp:BoundField DataField=”CSVデータの1項目目” HeaderText="設定1" />
<asp:BoundField DataField=”CSVデータの2項目目” HeaderText="設定2" />
</Columns>上記の様に意図的に設定した、Columにデータをバインドする方法は、あるのでしょうか?
CSVデータとしては、Colum項目データ無しで、別に定義された(a.aspxの中で、Colum定義)GridViewへの
貼り付けができないかを考えています。
目的は、ページ内に固定項目表があり、そこに複数のCSVデータを動的に張り替えたい為です。
合わせて、動的に編集を行い、編集後に”適用ボタン”でCSVに書き戻しを考えています。
別の的確な方法があれば、ご教授願います。データはCSVでお願いします。
-
DataField="<%= headers[0]%>" のようにはできませんので、そこには DataTable
の各 Column の ColumnName を手書きで記入するほかありません。他には、以下の方法があると思います。
(1) DataTable の各 Column の ColumnName を書き換えてからバインドする。
(2) TemplateField を使用する。
(3) Page.Load イベントのハンドラで動的に BoundField を生成し、その各
プロパティ(HeaderText, DataTextField など)を設定し、GridView
に追加する。
(4) GridView.RowCreated イベントのハンドラで書き換える。ただし、
> 目的は、ページ内に固定項目表があり、そこに複数のCSVデータを動的に張り替え
> たい為です。このあたり、依然として理解できませんので、目的に適うかどうかわかりませんが。
また、> 合わせて、動的に編集を行い、編集後に”適用ボタン”でCSVに書き戻しを考えて
> います。これは、どのようにすれば可能か見通しを立ててから、全体的な構成を考えた方がい
いと思います。ひょっとしたら、最初から無理なことをしているかもしれません。- 回答としてマーク Itumi 2011年9月1日 0:13