C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: DataGridViewButtonColumnのボタン名


(過去ログ 38 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■19487 / inTopicNo.1)  DataGridViewButtonColumnのボタン名
  
□投稿者/ はまや (6回)-(2008/05/23(Fri) 17:17:24)

分類:[データベース全般] 


お世話になります。

DataGridViewにデータバインドしたDataGridViewButtonColumnを
作成しています。
DataGridViewButtonColumnのボタン名は、バインドしているデータの
値がそのまま表示されますよね。
任意の値を表示するなら、UseColumnTextForButtonValueにtrueに設定し
Textに文字列を設定しますが、これだと全行同じ値が設定されます。

やりたい事は、バインド元のデータは0か1のint型なんですが
0ならボタン名は「OFF」に、1なら「ON」に設定したいんですが
何か良い方法がありましたら、よろしくお願いします。


開発環境
WindowsXP
VS2005 C#
SQL Server2005

引用返信 編集キー/
■19493 / inTopicNo.2)  Re[1]: DataGridViewButtonColumnのボタン名
□投稿者/ Megg (4回)-(2008/05/23(Fri) 18:02:41)
No19487 (はまや さん) に返信

> DataGridViewButtonColumnのボタン名は、バインドしているデータの
> 値がそのまま表示されますよね。
> 任意の値を表示するなら、UseColumnTextForButtonValueにtrueに設定し
> Textに文字列を設定しますが、これだと全行同じ値が設定されます。
>
> やりたい事は、バインド元のデータは0か1のint型なんですが
> 0ならボタン名は「OFF」に、1なら「ON」に設定したいんですが
> 何か良い方法がありましたら、よろしくお願いします。

SQLで、元データ列とは別に、一時的な列としてボタン名称用の列をつくってデータを呼ぶ(DECODEとかで置き換える)
→その名称用の列をDataGridViewButtonColumnを使う列にバインド
 その際、UseColumnTextForButtonValueはFalseのまま

そうすれば「バインドしてるデータ」自体が値によって既に切り替わった後なので
クライアント側で設定変えたりする必要がないかと。

引用返信 編集キー/
■19499 / inTopicNo.3)  Re[2]: DataGridViewButtonColumnのボタン名
□投稿者/ はまや (7回)-(2008/05/23(Fri) 20:46:16)
No19493 (Megg さん) に返信
> SQLで、元データ列とは別に、一時的な列としてボタン名称用の列をつくってデータを呼ぶ(DECODEとかで置き換える)
> →その名称用の列をDataGridViewButtonColumnを使う列にバインド
>  その際、UseColumnTextForButtonValueはFalseのまま
>
> そうすれば「バインドしてるデータ」自体が値によって既に切り替わった後なので
> クライアント側で設定変えたりする必要がないかと。
>

回答ありがとうございます。
ボタン名称用の列を作業用に作って、その列とバインドして表示させればOKという
ことですよね?
実は、SQL文は簡単な文法(SELECTとかUPDATE...)しか知らなくて、まずはそっちから
調べていたのですが、「ALTER TABLE ... ADD」というコマンドで列が追加できるようですが
これだと元のテーブルに列が追加されてしまいますよね?

そうじゃなくて、取得したDataTable側に列を追加してからDataGridViewにバインドして
ボタン押下のイベントで実データの値(0または1を反転)を変更し、
同じ行のボタン名称用の値も変更する。
という流れで出来そうですね。

この方法で、やってみたいと思います。

引用返信 編集キー/
■19501 / inTopicNo.4)  Re[3]: DataGridViewButtonColumnのボタン名
□投稿者/ Megg (5回)-(2008/05/23(Fri) 21:54:59)
No19499 (はまや さん) に返信
> ■No19493 (Megg さん) に返信

> 実は、SQL文は簡単な文法(SELECTとかUPDATE...)しか知らなくて、
なるほど。そういうことですか。

> 「ALTER TABLE ... ADD」というコマンドで列が追加できるようですが
> これだと元のテーブルに列が追加されてしまいますよね?
その通りです。そういうSQL文ですから。
私がイメージしていたのは、例えば元のテーブルが以下のような構成だとして、

TableA
======================
KeyColumn … char
Column2   … string
On_Off    … int
======================
※今回、表示用と内部値が別である列が「on_off」という名の列とします。

このTableAに、一時列を加えた状態でSELECTします。

SELECT
 KeyColumn 
 Column2
 On_Off
 CASE On_off WHEN 1 THEN 'オン' ELSE 'オフ'END AS ForDisplay ←名称用列
FROM Table_A


<<結果>>
KeyColumn  Column2 On_Off  ForDisplay
========== ======= ======= ===========
001        AAA     0       オフ
002        BBB     1       オン
003        CCC     1       オン

呼び出し時のみの列なので当然ながらUpdate等の更新、削除はできませんが、
他の列の値に基づいて変化させた値を入れるという場合には使える方法ではないでしょうか。

一時列であってもDataTable内の列として認識しますし、DataGridViewにもバインドできます。

> 取得したDataTable側に列を追加してからDataGridViewにバインドして
> ボタン押下のイベントで実データの値(0または1を反転)を変更し、
> 同じ行のボタン名称用の値も変更する。
ボタンを押下しようのない状態、即ち一番最初にデータを呼び出したときの
「ボタン名称用の値」についてはどう処理なさるお考えですか?

引用返信 編集キー/
■19578 / inTopicNo.5)  Re[4]: DataGridViewButtonColumnのボタン名
□投稿者/ はまや (8回)-(2008/05/26(Mon) 11:55:15)
No19501 (Megg さん) に返信

Meggさん、回答ありがとうございます。
自分が帰った後でさらにレスしていただけるとは感謝です。(

自分はと言えば、検討はずれな方向にプログラムを修正しまくって今すぐに元に戻して
動かせない状態なので、後ほど結果を報告したいと思います。
ただSQL Server Managementで教えて頂いたSQL文を試してみたら1行増えた状態で
取得できていたので、かなり簡単な方法で出来そうなので
早く結果を出したくてウズウズしています。

>>取得したDataTable側に列を追加してからDataGridViewにバインドして
>>ボタン押下のイベントで実データの値(0または1を反転)を変更し、
>>同じ行のボタン名称用の値も変更する。
> ボタンを押下しようのない状態、即ち一番最初にデータを呼び出したときの
> 「ボタン名称用の値」についてはどう処理なさるお考えですか?

バインドする前にデータを作っておけば大丈夫だと思っていました。
新規行についてはAllowUserToAddRowsをfalseに設定しておけば、表示されないですし
引用返信 編集キー/
■19585 / inTopicNo.6)  Re[5]: DataGridViewButtonColumnのボタン名
□投稿者/ はまや (10回)-(2008/05/26(Mon) 14:19:55)
Meggさん、出来ました!
ありがとうございます。

今回も大変勉強になりました。C#というよりはSQL文についてですけど
プログラムで何でもやろうとしたら駄目ですね
プログラムとSQLをうまく使いこなしてこそ、ですね〜

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -