
No.5ベストアンサー
- 回答日時:
削除せずにやると追加した列は 元の列の参照ですので プロパティを共有してしまうとも思います
BoundFieldクラスの変数をnewで新たなインスタンスを起こして DataFieldやHeaderTextプロパティなどを設計時に変更したプロパティを新規のオブジェクトに設定して追加してみましょう
何かのイベントで列を特定し、その列番号から新規の列を追加
dim field as DataContolField = GidView1.Colmuns(n)
if TypeOf fields is BoundField then
dim NewField as new BoundField()
dim OrgField as BoundField = CType( field, BoundField )
' 設計時にデフォルトから変更したプロパティをすべて設定する
NewField.DataField = OrgField.DataField
NewField.HeaderText = OrgField.HeaderText
field.Visible = false
GridView1.Columns.Add( NewField )
end if
といった具合です
元の位置にあるものを生かすようにするなら
dim flg as boolean = False
For n as Integer = 0 to GridView1.Columns.Count -1
if GridView1.Columns(n).HeaderText = "削除対象の列" then
if flg = false then
' 最初に見つかったのはオリジナルなので削除しない
flg = true
GridView1.Columns(n).Visible = true
else
' 2回目以降の項目は削除する
GridView1.Columns(n).RemoveAt(n)
end if
end if
next
といった具合でしょう …
返信ありがとうございます。
インスタンスの生成って
変数宣言だけではダメなんですね.
クラスの代入で参照渡しとは
C++言語主なもんで思いっきり思い込んでしまいました.
丁寧に教えていただいたおかげで
希望どおりの動作をすることができました
本当にありがとうございます.
No.4
- 回答日時:
データベースから取得するフィールドが GridViewのデザイン時設定した物がすべて含まれるようにすれば動的な発行でも問題ないはずです
足らない場合はページの構築をする際に例外が発生すると思います
列の順序の変更は
GridViewのColumnsコレクションに対してRemove、Addを繰り返せば可能なのですが 任意の位置への挿入は簡単には実現できないようです
たとえば ID,NameA,NameB,NameC,NameD といた場合に
ID,NameA, NameD,NameB,NameC といった順序に変更するなら
Dim col as DataControlField
for n as integer = 1 to 2
' colは n=1の場合 NameB列
' n=2の場合 NameC列
col = GridView1.Columns(2)
GridView1.Columns.Remove( col )
GridView1.Colmuns.Add( col );
next
といった具合です
スマートタグの
> 列の自動生成にチェックしたときと似ています
と『AutoGenerateColumns』は同じ事を意味します
返信ありがとうございます。
並び替えについてですが
力技ですが何とかできました。が一つだけ不可解な動きをしてしまいます
並び替えの方法ですが取り合えず全部読み込んでおいて、
必要な項目を任意の順に
Dim col as DataControlField
col = GridView1.Columns(index)
GridView1.Colmuns.Add( col )
として後ろに追加しておいて
最初に読み込んでおいたものを非表示にするという方法を考えました
しかし、次のようにコピー元を非表示にすると
GridView1.Columns(index).Visuvle = False
GridView1.Colmuns.Add( col )
で追加した方も非表示になってしまいます.
これは、こういうものなのでしょうか?
何とか別として扱うことはできないのでしょうか?
>スマートタグの
>> 列の自動生成にチェックしたときと似ています
>と『AutoGenerateColumns』は同じ事を意味します
なるほど、そうですか。ありがとうございます.
>データベースから取得するフィールドが GridViewのデザイン時設定し
>た物がすべて含まれるようにすれば動的な発行でも問題ないはずです
こちらについては確認ができませんでした
GridViewで列をすべて追加しておいて
SQLを動的にかえたのですが、どうもエラーになってしまいます.
こちらについてはもう少しためしてみます
No.3
- 回答日時:
動的に変更は可能ですよ
SqlDatSource1のSelectCommandプロパティを構築しなおして
Selectメソッドを実行
GridViewのDataSourceの設定と DataBindメソッドを実行すればいいようです
たとえば SELECT ID, NAME FROM tblMaster といったSQL文のデータソースがあった場合に
tblMaster.CodeBとtblCodeB.ID_Bで連結されていて tblCodeB.NameBを追加するなら
# コードは VB.NETにて記述しています
Dim nIndex as Integer = SqlDataSource1.SelectCommand.IndexOf( "FROM" ) - 1
' SQL文の『FROM』以前を取得
Dim s1 as String = SqlDataSource1.SelectCommand.SubString( 0, nIndex )
' 追加項目を文字列に追加
s1 += ", tblCodeB.NameB"
' FROM 以下を追加
s1 += SqlDataSource1.SelectCommand.SubString( nIndex )
' テーブル間の結合を追加
s1 += " INNER JOIN tblCodeB ON tblMaster.CodeB = tblCodeB.ID_B"
' 出来上がった文字列を設定
SqlDataSource1.SelectCommand = s1
' データベースに問い合わせ
SqlDataSource1.Select( new DataSourceSelectArguments() )
' DataBindを実行するための設定
GridView1.DataSource = SqlDataSource1
GridView1.DataBind()
といった具合です
GridView1のDataSourceはデザイン時には設定しないようにします
また AutoGenerateColumnsはTrueに設定しておきましょう
SQL文再構築はWHERE句やGROUP BY句などを考慮しておりません
返信ありがとうございます。
SQL文を動的に作成することで
順番は思い通りにできました。が、
ヘッダの編集ができなくなってしまいました.
AutoGenerateColumnsはTrueにすると、
ヘッダの背景の色などの編集をしようとすると
エラーになってしまうようになってしまいました
この状況はGridViewの列の編集で
列の自動生成にチェックしたときと似ています
また、HyperLinkの列を追加してそこに
「ID」と言う列の値を使ってリンクを貼っています.
これまではID列を読み込んでおいて
GridView.Colums(idx).visible=false
と言うように見えなくしていたのですが
これもエラーになってしまいました
>SqlDataSouceのSQL文をPage_Loadでいじると
>ご指摘のようなColumsへの操作ができず、
>Columsに操作ができるようにすると
>SQL文が動的に発行できません.
分かりにくくて申し訳ありません.
上記はそういうつもりで書いたつもりでした.
やはり、SQL文の動的発行と
Columsの編集は両立できないのでしょうか?
No.2
- 回答日時:
たとえば テーブル構造が
TableM ... ID,Name,CodeA,CodeB
TableA .... CodeA,ItemNameA,CommentA
TableB .... CodeB,ShipDate,CommentB
といった状態で
ID,Name,ItemNameA,ShipdDate
といった項目を返すデータソースを作成したとします
チェックボックスリストで ItemNameA,ShipDateを表示/非表示を制御するなら
SelectedIndexChanged イベントで
GridView1.Columns[2].Visible = CheckBoxList.Items[0].Select;
GridView1.Columns[3].Visible = CheckBoxList.Items[1].Select;
といった具合で可能になります
このColumnsは0ベースの配列ですので ID=0、Name=1といった順になっています
表示非表示だけではなく実際に並び替えたいのです.
SqlDataSouceのSQL文をPage_Loadでいじると
ご指摘のようにColumsに操作ができず、
Columsに操作ができるようにすると
SQL文が動的に発行できません.
そこでGridViewの縦列を入れ替えれないかと考えたのです.
No.1
- 回答日時:
データ自体の行の並び順ということでしょうか
それとも列自体の並び順ということですか
その並び順を示すコントロールとは何でしょう
またどのようなデータを送信しますか
グリッドに表示しているデータソースは何でしょう
並び順変更に際して 新たに データベースにSQLを発行するのでしょうか
それとも 初回に取得したデータをセッションに登録してありそれを使い回しするのでしょうか
返信ありがとうございます。
情報が足りておらず申し訳ありません.
まず、入れ替えたいのは列自体の並び順と言うことです.
つまりタイトルと情報を含めた縦列全部を並び替えたいと言うことです.
説明しますと、
現在、SqlDataSourceでSQLServerより情報を取得し、
GridViewコントロールで表示させています.
並び順を示すコントロールはDropdown、checkbox、radiobutton
などです.
詳細を示しますと、質問のタイトルは並び替えとなっていますが
正確には任意の位置に列を挿入したいということでもあります.
簡単に言うと、グループのメイン、サブ項目とあり、
メイン項目とサブ項目はまったく別にDBで管理されています.
コントロールの選択状況によって
サブ項目の挿入位置(順序)が変わるため
取り合えず全部読み込むSQLDataSouceを作っておいて
並び替えようと言うのが質問の内容です.
>並び順変更に際して 新たに データベースにSQLを発行するのでしょうか
>それとも 初回に取得したデータをセッションに登録してありそれを使い回しするのでしょうか
これに関してはどちらでもよいと思っています.
というか、DataSourceをセッションに残しておく方法は知りませんでした。
質問事項に答えられているか不安ですが、
返信をおまちしております。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) 1の行を固定した上でVBAを用いて日付順に自動並べ替え 2 2022/06/06 15:09
- Excel(エクセル) Excelで、行に複数の数字が入力されているセルが複数の列存在し、行を跨いでセル内の数値を並び替える 5 2022/06/17 18:03
- Excel(エクセル) Excel 郵便番号順に並び変えたい 同じ番号が複数あるとき 4 2022/04/28 18:35
- Excel(エクセル) Googleスプレッドシートの割合の関数と円グラフの並べ替えについて 1 2022/07/22 17:31
- Excel(エクセル) [オートフィルター]機能について 3 2023/02/04 14:32
- Excel(エクセル) 範囲指定をした中で、住所の列をユーザー設定の並べ替えをしたい 3 2022/05/15 13:51
- Excel(エクセル) 列の複数ある空白セルを飛ばして、セルに並べて表示したい 3 2023/02/12 16:49
- その他(Microsoft Office) Excel 2列分のDATAの並べ替え 1 2023/01/01 17:12
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- Google Drive Googleスプレッドシートについて質問です。 今作っているデータで、 シート1→ベタ打ちでひたすら 2 2022/05/18 14:27
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
vba 2つの条件が一致したら...
-
VBA 何かしら文字が入っていたら
-
B列の最終行までA列をオート...
-
【Excel VBA】 B列に特定の文字...
-
IIF関数の使い方
-
Excelで、あるセルの値に応じて...
-
特定の列全体を選択or検索パネ...
-
複数の列の値を結合して別の列...
-
文字列の結合を空白行まで実行
-
GridViewの行の入れ替えについて
-
【VBA】複数行あるカンマ区切り...
-
【VBA】2つのシートの値を比較...
-
VBA初心者です 検索した数字の...
-
Cellsのかっこの中はどっちが行...
-
グリッドの列の最大値を求めたい。
-
rowsとcolsの意味
-
Excel VBA 他組み合わせと比較...
-
ExcelVBAで配列2つを結合させ...
-
Excelの列に入っている値を全て...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
B列の最終行までA列をオート...
-
Excelで、あるセルの値に応じて...
-
Cellsのかっこの中はどっちが行...
-
Worksheets メソッドは失敗しま...
-
vba 2つの条件が一致したら...
-
VBAのFind関数で結合セルを検索...
-
IIF関数の使い方
-
VBA 何かしら文字が入っていたら
-
URLのリンク切れをマクロを使っ...
-
【VBA】2つのシートの値を比較...
-
Changeイベントでの複数セルの...
-
VBAで指定範囲内の空白セルを左...
-
【Excel VBA】 B列に特定の文字...
-
データグリッドビューの一番最...
-
VBAで、特定の文字より後を削除...
-
文字列の結合を空白行まで実行
-
VBAを使って検索したセルをコピ...
-
二つのリストを比べて部分一致...
-
マクロについて。S列の途中から...
-
マクロ 最終列をコピーして最終...
おすすめ情報