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

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

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

Re[2]: ラベルへの複数列のバインドについて


(過去ログ 144 を表示中)

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

■84424 / inTopicNo.1)  ラベルへの複数列のバインドについて
  
□投稿者/ なと (9回)-(2017/06/30(Fri) 18:32:17)

分類:[C#] 

2点質問です。

1.データベースで「姓」と「名」がある時に
Label氏名.Textに[姓]+" "+[名];
のような形式で表示されるようにしたいと思います。

DataBindingsプロパティのTextには
「tBL社員BindingSource - 姓」
という形でしか登録出来ませんが、通常はどのような手法でバインドすればよいのでしょうか。

2.xsdのTableAdapterに上記と同じく「氏名」列を生成させたいのですが、下記のSQL文ではエラーが出てしまいます。
SELECT ID, CONCAT(TBL社員情報.姓, TBL社員情報.名) AS 氏名
FROM TBL社員情報
正しい構文を教えていただけないでしょうか。
引用返信 編集キー/
■84425 / inTopicNo.2)  Re[1]: ラベルへの複数列のバインドについて
□投稿者/ WebSurfer (1255回)-(2017/06/30(Fri) 19:17:31)
No84424 (なと さん) に返信

SELECT クエリを、

SELECT [ID], [姓] + ' ' + [名] AS [氏名] FROM [TBL社員情報]

というようにして、[氏名] を使うということはできないのですか?

何を作っているのか(Windows Forms? WPF? ASP.NET Wen Forms? その他?)と、あなた
の環境(特に DB サーバーが何か)ぐらいは質問の最初に書きましょう。

知りたいことを書くのに一生懸命ということかもしれませんが、回答者が回答を考えるた
めの情報の提供もおろそかにしないようお願いします。

引用返信 編集キー/
■84427 / inTopicNo.3)  Re[2]: ラベルへの複数列のバインドについて
□投稿者/ なと (10回)-(2017/07/01(Sat) 08:48:22)
申し訳ございません。
Visual Studio 2017の環境はWindows Formsです。
mdbかSQLサーバーで動くようにしたいと考えております。

>SELECT [ID], [姓] + ' ' + [名] AS [氏名] FROM [TBL社員情報]
プラスで接続できる事をそもそも知りませんでした・・・。
ありがとうございます。
引用返信 編集キー/
■84428 / inTopicNo.4)  Re[3]: ラベルへの複数列のバインドについて
□投稿者/ 魔界の仮面弁士 (1330回)-(2017/07/02(Sun) 08:17:28)
No84427 (なと さん) に返信
> Visual Studio 2017の環境はWindows Formsです。
> mdbかSQLサーバーで動くようにしたいと考えております。

既に DataTable として取り込んだ後でも、
 ds.Tables[0].Columns.Add("氏名", typeof(string), "[姓] + ' ' + [名]");
などとして、結合された「氏名」フィールドを後から追加できます。

https://msdn.microsoft.com/ja-jp/library/system.data.datacolumn.expression%28vs.90%29.aspx
引用返信 編集キー/
■84429 / inTopicNo.5)  Re[1]: ラベルへの複数列のバインドについて
□投稿者/ 魔界の仮面弁士 (1331回)-(2017/07/02(Sun) 08:56:18)
No84424 (なと さん) に返信
> 2.xsdのTableAdapterに上記と同じく「氏名」列を生成させたいのですが、下記のSQL文ではエラーが出てしまいます。
> SELECT ID, CONCAT(TBL社員情報.姓, TBL社員情報.名) AS 氏名
> FROM TBL社員情報
> 正しい構文を教えていただけないでしょうか。

手元の環境では、CONCAT 関数でも正常に TableAdapter が生成されました。
(System.Data.SqlClient での接続)


とはいえ、SQL としては正しいのに、TableAdapter で構成しようとすると
解析されずにエラーになってしまうケースがあることは何度か経験しています。
(特に、SQL Server 以外のデータベース製品を用いる場合に顕著ですが…)


以下、対処療法として。


===== A案 =====

(1) 「SELECT ID, 'DummyText' AS 氏名 FROM TBL社員情報」などとして、列名だけを合致させた、仮の TableAdapter を構築する。

(2) 構成された DataTable の「氏名」列の型(DataType)と長さ(MaxLength)を正しいものに修正する。

(3) 本来の(正しい) SQL を加工し、改行を含めない 1 行のテキストにまとめ、その文字列をクリップボードにコピーしておく。
 たとえば、次のような SQL 文にする。
 「SELECT ID, CONCAT(TBL社員情報.姓, TBL社員情報.名) AS 氏名 FROM TBL社員情報」

(4) TableAdapter の SelectCommand.CommandText プロパティの欄をダブルクリックして全選択し、(3)の単一行 SQL をクリップボードから貼り付けて上書きする。

(5)このとき、以下のメッセージが表示されるので、[はい]か[いいえ]を選択する。
 『新しいコマンド テキストに基づいて更新コマンドをもう一度生成しますか? (現在の更新コマンドは上書きされます)』

(6)スキーマ更新失敗のエラーが表示される場合があるが、スキーマは(2)で構築済みなので無視する。
 『CommandText を更新できませんでした:
 新しいコマンドによって返されたデータのスキーマを取得できませんでした。
 テーブル "TBL社員情報" のスキーマは変更されませんでした。
 コマンドによって取得されたデータを反映できない可能性があります。』

(7)これで完成。念のため、InsertCommand/UpdateCommand/DeleteCommand の
 CommandText および Parameters を確認しておくこと。



===== B案 =====

A案 でもうまくいかない場合(TableAdapter 構成ウィザードすら起動しないようなケース)に限り、
最後の手段として、データセットの手動生成を試みる。

ソリューション エクスプローラーで DataSet1.xsd を右クリックして
[ファイルを開くアプリケーションの選択]から、
「XML (テキスト) エディター」を選択して生の XSD データを直接加工する。

※念のため、修正前のファイルもバックアップしておく。
引用返信 編集キー/
■84431 / inTopicNo.6)  Re[2]: ラベルへの複数列のバインドについて
□投稿者/ なと (11回)-(2017/07/03(Mon) 14:33:44)
No84429 (魔界の仮面弁士 さん) に返信
なるほど、xsdで正常なSQL構文でもエラーになってしまうことはあるのですね。

ひとまず+で結合する方法で動くようになりましたので、CONCATは使わない方向で行きます。

1については表示のみの話なので、バインドを止めて適当なイベントで更新することにしました。

以上、ありがとうございました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -