質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

ASP

ASP(Active Server Pages) あるいはClassic ASP (ASP Classic)は、マイクロソフト社開発した動的なウェブページ製作に利用可能なサーバー側のスプリクトエンジンです。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

2回答

10690閲覧

【ASPグリッドビュー】幅などを設定したいのですがIndexの外ですと言われます。

apprio

総合スコア19

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

ASP

ASP(Active Server Pages) あるいはClassic ASP (ASP Classic)は、マイクロソフト社開発した動的なウェブページ製作に利用可能なサーバー側のスプリクトエンジンです。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2016/09/13 08:52

編集2016/09/13 09:07

###実現したいこと
・グリッドビューの幅の設定
・グリッドビューの列の非表示

###発生している問題・エラーメッセージ

インデックスが範囲を超えています。
負でない値で、コレクションのサイズよりも小さくなければなりません。

###該当のソースコード

C#

1GridView1.DataSource = dtReader; 2GridView1.DataBind(); 3 4// GridView1の3行目(ID)を非表示にする 5GridView1.Columns[2].Visible = false; 6 7// GridViewの5行目(内容)を幅200にする。 8GridView1.Columns[4].HeaderStyle.Width = 200;

###状況
例として
・1行目が削除ボタン
・2行目が編集ボタン
・3行目がID
・4行目が日付
・5行目が内容
としてます。

プロパティで見たところ
全部で5行あるはずのGridviewですが
2行しかカウントされてませんでした。
その2行はボタン(削除、編集)のようです。
なので

C#

1// GridView1の3行目(ID)を非表示にする 2GridView1.Columns[2].Visible = false; //NG 3 4// GridView1の1行目(削除ボタン)を非表示にする 5GridView1.Columns[0].Visible = false; //OK

バインドしているはずなのに
認識されてない理由がなになのかさっぱりわかりません。ご教示ください。

###補足情報

VS2015
・ASP.net
・C#

SSMS
・SQLserver

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

GirdView は以下のようになっていて、AutoGenerateColumns はデフォルトの True で、データをバインドするときに、自動的に ID、日付、内容の列を追加するようになっていませんか?

<asp:GridView ID="GridView1" runat="server"> <Columns> <asp:CommandField ShowDeleteButton="True" /> <asp:CommandField ShowEditButton="True" /> </Columns> </asp:GridView>

そうだとすると、GridView.Columns プロパティで取得できる列のコレクションには上の 2 つの CommandField しか含まれません。

だから、GridView1.Columns[2] とすると、"負でない値で、コレクションのサイズよりも小さくなければなりません" というエラーになるのでしょう。

ID、日付、内容の列は BoundField または TemplateField を使ってそれに表示するようにし、AutoGenerateColumns を False に設定すればうまく行くのではと思います。

お試しください。

投稿2016/09/14 02:46

編集2016/09/14 02:48
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

GridViewやListViewにはたくさんのイベントがあります。

https://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.gridview_events(v=VS.100).aspx

例えば、
DataBindingイベント(サーバー コントロールがデータ ソースに連結すると発生)
RowDataBoundイベント(行がデータにバインドされたときに発生)
DataBoundイベント(サーバー コントロールがデータ ソースにバインドした後に発生)

なので、データが連結されるまえであれば、行自体もできていません。
別途、DataBoundイベントなどを作り、そのタイミングできちんと処理する必要があると思います。

投稿2016/09/13 09:07

Qoo

総合スコア1249

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

apprio

2016/09/13 09:15

2度目の回答ありがとうございます。 protected void DataBound(object sender, EventArgs e) GridView1.Columns[2].Visible = false; こういうことでしょうか?
Qoo

2016/09/13 09:37

GridViewはどのように設定されているのでしょうか? 下記のような感じになると思います。 --aspx-- <asp:GridView ID="GridView1" runat="server" OnDataBound="GridView1_DataBound"></asp:GridView> --cs-- protected void GridView1_DataBound(object sender, EventArgs e) { }
apprio

2016/09/14 00:24

回答ありがとうございます。 OnDataBound="GridView1_DataBound" aspxにこちらを追加し protected void GridView1_DataBound(object sender, EventArgs e) { // GridView1の3行目(ID)を非表示にする GridView1.Columns[2].Visible = false; // GridViewの5行目(内容)を幅200にする。 GridView1.Columns[4].HeaderStyle.Width = 200; } このように記述してみましたが同様のエラーが出てしまいます。 申し訳ありませんありませんが、思い当たる点などございますでしょうか?
Qoo

2016/09/14 00:49

DataBoundアイテムは、アイテムがバインドされるごとに発生します。 FindControlを使ってコントロールが正しく作られているかを確認するのが良いと思います。 参考: https://social.msdn.microsoft.com/Forums/ja-JP/ac0bb3cc-c7a4-4b20-8d32-5647d23bdd65/gridviewtemplatefield?forum=vsgeneralja ちなみに非表示にしたいのは行(rows)でしょうかそれとも、列(columns)でしょうか 単純に列を非表示にしたいだけであれば列の設定のところでvisibleを設定するのが簡単だと思います。 <asp:boundfield datafield="filename" headertext="ファイル名" visible=false> </asp:boundfield>
apprio

2016/09/14 01:52

ありがとうございます。 非表示は読み取るために用意したIDの列です。 試してみます。 あと少し気づいたのですが aspxで <Columns> <asp:ButtonField ButtonType="Button" CommandName="Edt" Text="編集" /> <asp:ButtonField ButtonType="Button" CommandName="Del" Text="削除" /> </Columns> としかないのですがデータが表示するものも記述しないとだめなのでしょうか? Textfieldみたいなもので。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問