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

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

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

Re[8]: DataGridViewの固定長のスペース除去方法


(過去ログ 51 を表示中)

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

■27799 / inTopicNo.1)  DataGridViewの固定長のスペース除去方法
  
□投稿者/ たこやき (38回)-(2008/11/14(Fri) 21:37:44)

分類:[C#] 

C#2008
いつもお世話になっています。
SQLServer2005のnvarchar(50)の固定長列のデータを
DataGridViewに表示すると、入力文字の後方にスペースが挿入されますが、
このスペースを除去する方法はないでしょうか。
このスペースがあると、DataGridViewの表示幅が10文字程度の場合、
Cellにカレントを移すと、文字が隠れてしまう上、
入力位置(キャレット)が最後尾になり、
先の入力文字に続けて文字を入力するのが困難になります。
ご指導よろしくお願いします。

引用返信 編集キー/
■27802 / inTopicNo.2)  Re[1]: DataGridViewの固定長のスペース除去方法
□投稿者/ やじゅ (778回)-(2008/11/14(Fri) 21:59:15)
やじゅ さんの Web サイト
No27799 (たこやき さん) に返信
> DataGridViewに表示すると、入力文字の後方にスペースが挿入されますが、
> このスペースを除去する方法はないでしょうか。

RTrimのキーワードで検索して味噌。

引用返信 編集キー/
■27809 / inTopicNo.3)  Re[2]: DataGridViewの固定長のスペース除去方法
□投稿者/ たこやき (39回)-(2008/11/15(Sat) 00:10:33)
やじゅさん、いつもありがとうございます。
RTrimは把握していますが、どのタイミングで使っていいのかわかりません。
もう少しヒント下さい。すみません。
引用返信 編集キー/
■27817 / inTopicNo.4)  Re[3]: DataGridViewの固定長のスペース除去方法
□投稿者/ nori (23回)-(2008/11/15(Sat) 10:29:50)
試してませんが
DataGridView::CellFormattingではどうでしょう

引用返信 編集キー/
■27831 / inTopicNo.5)  Re[4]: DataGridViewの固定長のスペース除去方法
□投稿者/ たこやき (40回)-(2008/11/15(Sat) 14:46:04)
noriさん、ありがとうございました。
おかげで取り除くことができました。
Cellの表示を変える為のものだと思っていたし、
スピードが遅くなる等々書かれていたので、
なかばスルーしていました。
本当にありがとうございました。
でも、もうちょっと簡単な方法はないのかな〜と思ったりもしますが……
private void DataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (this.DataGridView1.Columns[e.ColumnIndex].Name == "列名")
{
if (e.Value != null)
{
string str = (string)e.Value;
e.Value = str.TrimEnd();
}
}
}
解決済み
引用返信 編集キー/
■27848 / inTopicNo.6)  Re[3]: DataGridViewの固定長のスペース除去方法
□投稿者/ やじゅ (780回)-(2008/11/16(Sun) 08:54:44)
やじゅ さんの Web サイト
No27809 (たこやき さん) に返信
> RTrimは把握していますが、どのタイミングで使っていいのかわかりません。
> もう少しヒント下さい。すみません。

SQLの段階で、RTrimするのが簡単ですけどね。
RTrim(Hoge) As Hoge

解決済み
引用返信 編集キー/
■27880 / inTopicNo.7)  Re[4]: DataGridViewの固定長のスペース除去方法
□投稿者/ たこやき (44回)-(2008/11/17(Mon) 11:00:15)
やじゅさん いつもありがとうございます。
ド素人で理解力がなくて申しわけありません。
以下のような形でいいのでしょうか?

var aa =
from p in tt
select p.TrimEnd();

もしこの形でいいのでしたら、
読み取り専用になってしまいますよね。
間違っていたらお教え下さい。
引用返信 編集キー/
■27884 / inTopicNo.8)  Re[5]: DataGridViewの固定長のスペース除去方法
□投稿者/ ぽぴ王子 (406回)-(2008/11/17(Mon) 11:28:34)
ぽぴ王子 さんの Web サイト
No27880 (たこやき さん) に返信
> やじゅさん いつもありがとうございます。
> ド素人で理解力がなくて申しわけありません。
> 以下のような形でいいのでしょうか?
>
> var aa =
> from p in tt
> select p.TrimEnd();
>
> もしこの形でいいのでしたら、
> 読み取り専用になってしまいますよね。
> 間違っていたらお教え下さい。

うーん…とりあえず理解力というか、考える方向から間違ってるんじゃないかなぁと推測。
LINQ は悪い方法ではないかもだけど、やじゅさんは
> SQLの段階で、RTrimするのが簡単ですけどね。
> RTrim(Hoge) As Hoge
と書いているので、LINQ は SQL の段階じゃないことぐらいは理解したい。

単純に「sql trim」で検索したら、こういったページもありました。
http://sql.1keydata.com/jp/sql-trim.php
こういった話をヒントで出してもらっていたんじゃないかしら。

でも、こういった列はスペースが入らないように nvarchar なりで設定しておくのが
一般的じゃないのかしらん?とか思ったりもします。
引用返信 編集キー/
■27890 / inTopicNo.9)  Re[6]: DataGridViewの固定長のスペース除去方法
□投稿者/ たこやき (46回)-(2008/11/17(Mon) 12:21:39)
ぽぴ王子 さん ご返信ありがとうございます。
SQLってストアドプロシージャーのことだったんですか?
ストアドはまったくできないので(まだそこまで行けてません)、
予想しなかったです。

> でも、こういった列はスペースが入らないように nvarchar なりで設定しておくのが
> 一般的じゃないのかしらん?とか思ったりもします。

その具体策はわかりませんが、フィーリング的にそのような解決策を求めています。
申し訳ありませんが、もう少しヒント下さい。
引用返信 編集キー/
■27895 / inTopicNo.10)  Re[7]: DataGridViewの固定長のスペース除去方法
□投稿者/ ぽぴ王子 (407回)-(2008/11/17(Mon) 12:56:14)
ぽぴ王子 さんの Web サイト
No27890 (たこやき さん) に返信
> ぽぴ王子 さん ご返信ありがとうございます。
> SQLってストアドプロシージャーのことだったんですか?
> ストアドはまったくできないので(まだそこまで行けてません)、
> 予想しなかったです。
>
>>でも、こういった列はスペースが入らないように nvarchar なりで設定しておくのが
>>一般的じゃないのかしらん?とか思ったりもします。
>
> その具体策はわかりませんが、フィーリング的にそのような解決策を求めています。
> 申し訳ありませんが、もう少しヒント下さい。

ふむ。
とりあえず考える方向じゃなくて、やっぱり読解力がないのかも、とか思い始めてきました。
根本的には「読解力というよりは読んでも前提となる知識がないので理解できていない」かな。

SQL とは書いてありますけど、それがストアドプロシージャーのことであるとは、たぶん
どこにも書いてありませんよね。やじゅさんも書いていないし、私も書いていないし、もちろん
リンク先にもないはず。
ってことは、どこから「SQLってストアドプロシージャー」だと思ったのですか???
僕の方こそ予想しませんでした。

SQL は SQL です。SQLServer2005 からデータを読み込んでいるわけですよね。だとしたら
そのために SQL が存在しているはずです。それに書けばよろしい、です。

> でも、こういった列はスペースが入らないように nvarchar なりで設定しておくのが
> 一般的じゃないのかしらん?とか思ったりもします。

で、こっちはそもそもが nvarchar に固定長で格納しているようだったので、そこから
見直さないといけなさそうな感じです。

> SQLServer2005のnvarchar(50)の固定長列のデータを
> DataGridViewに表示すると、入力文字の後方にスペースが挿入されますが、
> このスペースを除去する方法はないでしょうか。

って書いてますよね。
nvarchar は可変長なので、データを格納するときにスペースを入れなければ、ちゃんと
スペースのない状態で取り出せるはずです。これが nchar だったりすると、スペースで
パディングされるので、取り出した先で TRIM してあげる必要があるとは思いますが。

つまり、そもそもの問題は nvarchar の列になんで固定長のデータをつっこんでいるのか
ということです。何かしら理由があるのであればいいですが、それならばなぜ nchar では
なく nvarchar なのか、という疑問もわいてきます。

ヒントを要求するのはかまわないのですが、出したヒントが有効活用されないのでは
出す意味がありません。
引用返信 編集キー/
■27896 / inTopicNo.11)  Re[8]: DataGridViewの固定長のスペース除去方法
□投稿者/ まんごーぷりん (4回)-(2008/11/17(Mon) 13:56:01)
まんごーぷりん さんの Web サイト
バインディング元のデータソースを力ずくで・・・という方法もありますが、やじゅ氏の方法・・・というか DB の型の選択が、そもそも誤っている気がします
引用返信 編集キー/
■27897 / inTopicNo.12)  Re[9]: DataGridViewの固定長のスペース除去方法
□投稿者/ たこやき (47回)-(2008/11/17(Mon) 14:57:14)
まんごーぷりん さん ご返信ありがとうございます。
>DB の型の選択が、そもそも誤っている気がします
C#独学初心者で、SQL Server についての知識は
皆無に等しいので、皆さんに歯がゆい思いをさせていますが、
nvarchar(50)がまちがっているということですね。
今から始めるならunicodeかな?と思い、nvarchar(50)を何気なく選んでいます。
Transact-SQLで削除する方法は見当たるのですが、今は無理です。
nvarcharの規定値に空文字("")すら設定できずにいます。
もし良ければもう少し教えて下さい。



引用返信 編集キー/
■27898 / inTopicNo.13)  Re[10]: DataGridViewの固定長のスペース除去方法
□投稿者/ まんごーぷりん (5回)-(2008/11/17(Mon) 15:16:10)
まんごーぷりん さんの Web サイト
>nvarchar(50)がまちがっているということですね。

僕の間違いです。
固定長なデータ型を選択しているのだとばかり思っていました。
この辺りの解釈は、ぽぴ王子氏と全く同じです。

>nvarchar は可変長なので、データを格納するときにスペースを入れなければ、ちゃんと
>スペースのない状態で取り出せるはずです。これが nchar だったりすると、スペースで

nvarcharを使っているなら、後ろにスペースが入ってしまうのは何故なんでしょう?

んで、続きです。
以下のような SQL 文を DB サーバーに向かって投げればいいでしょうと、やじゅ氏や、ぽぴ王子氏が言っています。

"SELECT RTrim(Hoge) As Hoge FROM TABLE_NAME;"
引用返信 編集キー/
■27899 / inTopicNo.14)  Re[1]: DataGridViewの固定長のスペース除去方法
□投稿者/ みきぬ (213回)-(2008/11/17(Mon) 15:22:56)
そもそもは、

■No27799 (たこやき さん) に返信
> SQLServer2005のnvarchar(50)の固定長列のデータを

nvarchar は固定長列じゃないでしょってお話です。
なので、意図的に末尾のスペースを入れるようなことをしているとか、何か理由(原因)がない限り
# 登録クエリで  "'" + hoge + " '" とかやっているとか

> DataGridViewに表示すると、入力文字の後方にスペースが挿入されますが、

こういうことは起こらないんじゃないかなーと思うです。
trim するのもいいけれど、その辺の原因を突き止めたほうがいいんじゃないですか?



引用返信 編集キー/
■27903 / inTopicNo.15)  Re[2]: DataGridViewの固定長のスペース除去方法
□投稿者/ まんごーぷりん (7回)-(2008/11/17(Mon) 15:34:48)
まんごーぷりん さんの Web サイト
No27899 (みきぬ さん) に返信
> そもそもは、
>
> ■No27799 (たこやき さん) に返信
>>SQLServer2005のnvarchar(50)の固定長列のデータを
>
> nvarchar は固定長列じゃないでしょってお話です。
> なので、意図的に末尾のスペースを入れるようなことをしているとか、何か理由(原因)がない限り
> # 登録クエリで "'" + hoge + " '" とかやっているとか

CSV や COBOL で生成されたファイルをインポートしちゃったみたいな、やっちゃった感アリアリな状態のテーブルを、不幸にもたこやきさんが扱うことになってしまった可能性も高いです。
何れにせよ、インポートする時点でスペース除去作業しないと nvarchar 使った意味なくなっちゃうよー、ってことですよね。

引用返信 編集キー/
■27904 / inTopicNo.16)  Re[3]: DataGridViewの固定長のスペース除去方法
□投稿者/ みきぬ (214回)-(2008/11/17(Mon) 15:46:20)
No27903 (まんごーぷりん さん) に返信
> CSV や COBOL で生成されたファイルをインポートしちゃったみたいな、やっちゃった感アリアリな状態のテーブルを、不幸にもたこやきさんが扱うことになってしまった可能性も高いです。
> 何れにせよ、インポートする時点でスペース除去作業しないと nvarchar 使った意味なくなっちゃうよー、ってことですよね。
>
ですねー。

…ふと不安になった。もしかしたら、アプリケーションを使って登録する場合でも、ユーザがついうっかり末尾スペースを入れてしまった可能性に備えて、それをTrimで除去してから登録してあげたほうがいいのだろうか?
# 修正考えたら頭痛くなってきた。とりあえず今作ってるアプリでは、ユーザの自己責任にしてもらおう
引用返信 編集キー/
■27911 / inTopicNo.17)  Re[4]: DataGridViewの固定長のスペース除去方法
□投稿者/ まんごーぷりん (9回)-(2008/11/17(Mon) 16:28:53)
まんごーぷりん さんの Web サイト
No27904 (みきぬ さん) に返信
> ■No27903 (まんごーぷりん さん) に返信
> …ふと不安になった。もしかしたら、アプリケーションを使って登録する場合でも、ユーザがついうっかり末尾スペースを入れてしまった可能性に備えて、それをTrimで除去してから登録してあげたほうがいいのだろうか?
> # 修正考えたら頭痛くなってきた。とりあえず今作ってるアプリでは、ユーザの自己責任にしてもらおう

ちょっとだけ脱線をお許しください>スレ主さま

これはもう仕様によるものかと思います。
ユーザーが故意に空白を末尾に入力したい可能性もあり得るので、特に指定がなければ、何もしなくて良いかと思います。

ただし、PrimaryKey などで利用するような値(品番とか図番とか)は、詳細に仕様をかためるべきで、そこに末尾の空白の除去を含めるのが理想的です。
まぁ、それ以前に A-Z,0-9 のように空白は使わない仕様も多くなりそうですけれど・・・
引用返信 編集キー/
■27913 / inTopicNo.18)  Re[5]: DataGridViewの固定長のスペース除去方法
□投稿者/ やじゅ (783回)-(2008/11/17(Mon) 16:55:37)
やじゅ さんの Web サイト
No27880 (たこやき さん) に返信
> 以下のような形でいいのでしょうか?
>
> var aa =
> from p in tt
> select p.TrimEnd();
>
> もしこの形でいいのでしたら、
> 読み取り専用になってしまいますよね。
> 間違っていたらお教え下さい。

LINQでしたか・・・、
LINQもこれから質問が徐々に増えてくるので、SQL=DBと直に考えてはいけないですね、
回答する上でも気をつけたいと思います。


私の意図としては、DataViewGridに入るデータ側を加工したらどうでしょうってことでした。
LINQでも、その方法があると思います。
p.TrimEnd(); では読み取り専用になるとのことなので、特定列のみでかつTrimEnd後の
名前を指定する方法はあるんじゃないかと思ってるんですが、なにぶん、LINQは未経験なんで
回答は控えます。
引用返信 編集キー/
■27916 / inTopicNo.19)  Re[5]: DataGridViewの固定長のスペース除去方法
□投稿者/ たこやき (48回)-(2008/11/17(Mon) 17:12:55)
まんごーぷりんさん みきぬさん ありがとうございます。
>こういうことは起こらないんじゃないかなーと思うです。
ご指摘通り、新たにテーブルを作成して行ってみると、起こりませんでした。
幸いにもテストデータなので問題ないのですが、
残念ながらどこで入ったのかわかりませんでした。
それで不思議なことに、今新たに追加したデータには含まれません。
noriさんに教えていただいたCellFormattingで見えなくなっていたので
わかりませんでしたが、LINQを模索していた中で挿入されたのかな……。
本当にご迷惑をおかけしました。
ぽぴ王子さんにも不愉快な思いをさせて、
本当にみなさん、貴重な時間を申しわけありませんでした。

解決済み
引用返信 編集キー/
■27950 / inTopicNo.20)  Re[6]: DataGridViewの固定長のスペース除去方法
 
□投稿者/ ぽぴ王子 (408回)-(2008/11/18(Tue) 08:49:54)
ぽぴ王子 さんの Web サイト
No27916 (たこやき さん) に返信
> まんごーぷりんさん みきぬさん ありがとうございます。
> >こういうことは起こらないんじゃないかなーと思うです。
> ご指摘通り、新たにテーブルを作成して行ってみると、起こりませんでした。
> 幸いにもテストデータなので問題ないのですが、
> 残念ながらどこで入ったのかわかりませんでした。
> それで不思議なことに、今新たに追加したデータには含まれません。
> noriさんに教えていただいたCellFormattingで見えなくなっていたので
> わかりませんでしたが、LINQを模索していた中で挿入されたのかな……。
> 本当にご迷惑をおかけしました。
> ぽぴ王子さんにも不愉快な思いをさせて、
> 本当にみなさん、貴重な時間を申しわけありませんでした。

えーと、もしかすると誤解を受けているような気がしますが、私自身は不愉快な思いは全然していません。
不愉快であればそもそも書き込んだりせずに見捨てるので。

スレ主さんが質問をするのは非常に歓迎ですが、回答されたことが理解できないと回答する側も
もっとかみ砕いて説明しないといけない?と思うわけです。
ただ、掲示板で伝えられることというのはものすごく少なくて、それを一から説明するのは正直
厳しいです。

独学と言うことで難しいかもしれませんが、今回の質問で言えば nvarchar(50) になんでスペースが
入ってるのん?というところから回答者が突き詰めていかなければならなくて、それはそもそもが
質問者、というか環境を把握している人がなんとかすべき問題じゃないのかな?と。
回答者として協力できるところはできるだけ協力する体制ですが、質問する際にもいろいろと気をつける
ところもあるかもしれません。
引用返信 編集キー/

次の20件>
トピック内ページ移動 / << 0 | 1 >>

管理者用

- Child Tree -