- - PR -
DataGridでNULLが表示されない
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-11-19 18:12
はじめまして TAKADONと申します
開発環境 Windows2000SERVER + VB.NET + Sqlserver 2000でWEBアプリケーションを 作っています。開発経験は1ヶ月です DataGridを使用して検索結果を表示させたいのですが データアダプタのデータのプレビュでは正しい検索結果なのですが DataGrid上だと同じように表示されません。 DataGrid消して作り直したり してみたりしたのですが結果が変わりません データソースとしてストアドを使っています 住所の部分はNULLがOKなカラムです。 よろしくお願いいたします。 データプレビュー(正しいデータ) No NAME 住所 1 AA XX県 2 BB (NULL) 3 CC ZZ県 4 DD (NULL) 5 EE YY県 DATAGRIDで表示されるデータ No NAME 住所 1 AA XX県 3 CC ZZ県 5 EE YY県 | ||||||||
|
投稿日時: 2004-11-23 10:52
諸農です。
DBサーバーから取得したDataSet/DataTableをどのような方法で DataGridにセットしていますか? また、DataViewなどを利用して表示条件を指定していたりしていませんか? 再現できる最小限のコードを提示してもらうことは可能ですか? _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||||||
|
投稿日時: 2004-11-24 10:27
返信ありがとうございます
データセットの方法については データアダプタでストアドを指定して使用しています ストアドについては(usp_datasearch) 引数 varchar @s_name 検索する名前 引数 varchar @s_jyusyo 検索する住所 SQL文 varchar @strSQL SET @strSQL = 'SELECT TOP 100 PERCENT NO,NAME,住所 FROM 住所録' IF @s_name IS NOT NULL BEGIN SET @strSQL = @strSQL + ' AND ' + 'NAME LIKE' + '''' + '%' + @s_name + '%' +'''' END IF @s_jyusyo IS NOT NULL BEGIN SET @strSQL = @strSQL+' AND ' + 'NAME LIKE' + '''' + '%' + @s_jyusyo + '%' +'''' END EXEC (strSQL) という感じです DATASETの方法については データアダプタ datasearch_dap datasearch_dap.Selectcommand.parameters("@s_name").value = Me.s_name_txt datasearch_dap.Selectcommand.parameters("@s_jyusyo").value = Me.s_jyusyo_txt datasearch_dap.Fill(dataset1,"usp_data_search") DataGrid1.databind() というような感じで記述しています。 DataAdapterのSelect文をストアドを使わず条件もなしで全件表示するSelect文にするとNullも表示されます。 このSelect文になる前に一度Select文の条件設定を間違えてDatasetを作ってしまったのですがその間違ったSelect文がDataset上に残っており正しいSelect文が適用されない(更新されていない)等の現象の可能性はあるのでしょうか よろしくお願いいたします。 | ||||||||
|
投稿日時: 2004-11-24 10:29
上記DataGridのFillの部分でストアド名を打ち間違えました
正しくは "usp_datasearch"です。 すみませんでした | ||||||||
|
投稿日時: 2004-11-24 11:02
諸農です。
であれば、ストアドを使わない時(NULL含むレコード表示も可能な時)の取得件数と、ストアドを使った時の取得件数を比較して、ストアドで取得した件数が少ないのであれば、少なくなった分がNULL含むレコードかどうかの確認をして、そうであればストアドの見直しをしてみるのがいいのではないでしょうか。 _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||||||
|
投稿日時: 2004-11-24 11:40
お答えが出てないようなので、検証できないけど、書きますね。
うまくいったというSQLを書いてもらえるとありがたいです。 SQLServer2000用語集 http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/tsqlref/ts_ea-ez_4aur.asp によると、 ----- NULL (NULL) 値を明示的に代入していないエントリ。NULL は 0 やブランクとは違います。NULL 値は、ほかの値が NULL 値の場合も含めて、ほかの値よりも大きいか、小さいか、等しいかを調べることはできません。 ----- とのことですので、Likeもだめなのかもしれません。 Transact-SQL リファレンス LIKE http://www.microsoft.com/japan/msdn/library/ja/tsqlref/ts_la-lz_115x.asp _________________ たつごろー codeseek こみゅぷらす | ||||||||
|
投稿日時: 2004-11-24 12:36
パラメータに NULL ではなく、空文字列を設定しているからではないでしょうか。
SP 側で
呼び側で
| ||||||||
|
投稿日時: 2004-11-24 17:25
Jubeiさん たつごろーさん にしざきさん本当にありがとうございました。
にしざきさんの言われたとおりコードを呼ぶ際 DBNULL.valueを設定することで 解決いたしました。 皆様ありがとうございました。 |
1