C#でボタンの制御をしたいのですが…
初投稿です。お世話になります。
現在、VisualStadio 2003でC#を使ってWebアプリケーションの開発(正確に言えば小手先の修正)をしています。そこで壁にぶち当たってしまいましたので、助けていただければと思い投稿します。
システムにログインすると表示されるメニュー画面があり、今まではログイン者の部署ごとにプログラムに直書きでボタンの押下可/不可の制御をしていました。
今回、それに加えて個別に利用するボタンをDBのテーブルに設定して、データがある人がログインしたときに登録されているボタンのみ押下可にしたいと思っています。
そこで…
-------------------------------------------------------
private bool InvidualSetting(int userno, Page page)
{
const string COMMAND = "SELECT A.ボタン名 FROM MST_メニュー A "
+ "WHERE EXISTS (SELECT 'X' FROM MST_個別メニュー B WHERE )"
+ "B.ユーザNO = %USERNO% AND A.メニュー番号 = B.メニュー番号)"
DataTable invidualTable = %USERNO%を渡されたusernoに置換してSQL実行
(ここで取得するボタン名とは、System.Web.UI.WebControls.Button で宣言されているボタンの名前)
データがなければfalseを返して終了
データがあった場合…
Button invidualButton;
foreach(DataRow row in invidualTable.Rows)
{
invidualButton = (Button)row[0];
invidualButton.Enabled = true;
}
return true;
}
呼び出し元では、
trueが帰ってきたら処理終了
falseが帰ってきたら部署ごとの制御を行なう
-------------------------------------------------------
上記のようにプログラムに追加したのですが、実行時に
invidualButton = (Button)row[0];の部分で
「指定されたキャストは有効ではありません」
とエラーになり、どうしていいかわからない状態です。
その前の、
invidualButton = (Button)row[0];
の部分で(Button)がないとビルド時に「Object型をWebCotrolsに暗黙的に変換できません」とエラーが出ます。
ならば明示的に変換できればいいんじゃないか??と思う次第なのですが…。やり方間違っているからエラーになるんでしょうけれど…。
JavaScriptでいうevalのようなもので値の評価というか、そういうことができないのかな…と調べてみたのですが、さっぱりでした。
確実なのは、今までと同じくプログラムに直書きしてしまうことだと思うのですが、それだと人が変わるなど変更があるたびにビルドしてリリースして…という作業が発生してしまうのでそれだけは避けたいと思っています。
(画面を新規に作るスキルはないので結局はDBのデータを更新するしかないのですが(C#の知識なんてほとんどないのに、前任者が作ったもののメンテナンスを時々やっています))
すみません、長くなりました。
キャストなど、わかっていないのは重々承知しているのですが、ご助言・ご教授のほど、よろしくお願いいたします。
お礼
参考になりました。ためしてみようと思います。