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

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

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

Re[11]: SQLの結果が無い場合は0を表示させたい


(過去ログ 22 を表示中)

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

■9287 / inTopicNo.1)  SQLの結果が無い場合は0を表示させたい
  
□投稿者/ 霞 (1回)-(2007/10/24(Wed) 11:35:41)

分類:[ASP.NET (C#)] 

2007/10/24(Wed) 12:21:57 編集(投稿者)

こんにちは、現在SQLをDataSetにセットし、それを使いDataGridに表示させています。
その中でループを使用し、SQLを一つ一つ読み込み、結果をDataGridに継ぎ足していくといった作業をしています。
そのSQLを使い、結果が返ってきた場合はそのまま、結果が無かった場合には0を表示させたいのです。

返ってきた結果
0
返ってきた結果
   ・
   ・
   ・
   ・
という形にしたいのですが、どのようにすればいいでしょうか?


引用返信 編集キー/
■9293 / inTopicNo.2)  Re[1]: SQLの結果が無い場合は0を表示させたい
□投稿者/ ぼのぼの (107回)-(2007/10/24(Wed) 12:43:32)
継ぎ足していく処理の中でDataSetから取り出したDataTableのRowsのCountが0だったらDataGridに新しい行を追加してセルに0をセットすれば良いのではないでしょうか。
引用返信 編集キー/
■9299 / inTopicNo.3)  Re[2]: SQLの結果が無い場合は0を表示させたい
□投稿者/ 霞 (3回)-(2007/10/24(Wed) 13:51:49)
2007/10/24(Wed) 13:52:29 編集(投稿者)
DataTableのRowを見るにはどのようにすればいいでしょうか・・・・無知ですいません。

現在、下記のような感じでコーディングしています。

public class WebForm1 : System.Web.UI.Page
{
	protected System.Web.UI.WebControls.DataGrid DataGrid1;
	DataSet ds = new DataSet("URIAGE");

  private void Page_Load(object sender, System.EventArgs e)
  {
    OracleConnection oracon = new OracleConnection();
			
    oracon.ConnectionString =
    "user id=a;" +
    "password=b;" +
    "Data Source = c";
	
         for(int i=0; i < 100; i++)
	{
               OracleDataAdapter oleda;  

            oleda = new OracleDataAdapter("SELECT A,B,C FROM TABLE",oracon)
            oleda.Fill(ds,"URIAGE");

	   DataGrid1.DataSource = ds.Tables[0];
	   DataGrid1.DataBind();
     }
     }
}


引用返信 編集キー/
■9318 / inTopicNo.4)  Re[3]: SQLの結果が無い場合は0を表示させたい
□投稿者/ ぼのぼの (108回)-(2007/10/24(Wed) 16:27:37)
No9299 (霞 さん) に返信
> 	   DataGrid1.DataSource = ds.Tables[0];

これがDataTableです。

if (ds.Tables[0].Rows.Count == 0)

で判定できませんか?

引用返信 編集キー/
■9322 / inTopicNo.5)  Re[4]: SQLの結果が無い場合は0を表示させたい
□投稿者/ 霞 (4回)-(2007/10/24(Wed) 16:45:56)
No9318 (ぼのぼの さん) に返信
> ■No9299 (霞 さん) に返信
>>    DataGrid1.DataSource = ds.Tables[0];
>
> これがDataTableです。
>
> if (ds.Tables[0].Rows.Count == 0)
>
> で判定できませんか?

試してみましたが、ループした回数だけカウントされてるようで、だめでした・・・。
引用返信 編集キー/
■9326 / inTopicNo.6)  Re[5]: SQLの結果が無い場合は0を表示させたい
□投稿者/ ぼのぼの (109回)-(2007/10/24(Wed) 17:14:45)
No9322 (霞 さん) に返信
> 試してみましたが、ループした回数だけカウントされてるようで、だめでした・・・。

処理イメージは、以下のような感じですよね?

SQLの数だけループ {
    SQLを実行
    if(実行結果が0件) {
        DataGridに0を表示する行を追加
    } else {
        DataGridにSQLの結果を表示する行を追加
    }
}

ループした回数だけカウントされていいのでは?

引用返信 編集キー/
■9327 / inTopicNo.7)  Re[6]: SQLの結果が無い場合は0を表示させたい
□投稿者/ 霞 (5回)-(2007/10/24(Wed) 17:22:31)
No9326 (ぼのぼの さん) に返信
> ■No9322 (霞 さん) に返信
>>試してみましたが、ループした回数だけカウントされてるようで、だめでした・・・。
>
> 処理イメージは、以下のような感じですよね?
>
> SQLの数だけループ {
> SQLを実行
> if(実行結果が0件) {
> DataGridに0を表示する行を追加
> } else {
> DataGridにSQLの結果を表示する行を追加
> }
> }
>
> ループした回数だけカウントされていいのでは?


if(実行結果=0件)にならずに、if(実行結果のループの回数=0件)
になってるみたいです。
引用返信 編集キー/
■9329 / inTopicNo.8)  Re[7]: SQLの結果が無い場合は0を表示させたい
□投稿者/ ぼのぼの (110回)-(2007/10/24(Wed) 17:48:49)
No9327 (霞 さん) に返信
> if(実行結果=0件)にならずに、if(実行結果のループの回数=0件)
> になってるみたいです。

あ〜、原因がわかりました。
Fillメソッドによって、SQLの実行結果は、ds.Tables[0]の末尾に追加されていくので、
見かけ上はそういう動作になってるですね。
「実行前と比べて行数の変化が無いか」という判定方法にするか、
ループ内で毎回DataSetをnew(または中身をClear)するかどっちかしないといけませんね。
引用返信 編集キー/
■9330 / inTopicNo.9)  Re[8]: SQLの結果が無い場合は0を表示させたい
□投稿者/ 霞 (6回)-(2007/10/24(Wed) 17:58:50)
No9329 (ぼのぼの さん) に返信
> ■No9327 (霞 さん) に返信
>>if(実行結果=0件)にならずに、if(実行結果のループの回数=0件)
>>になってるみたいです。
>
> あ〜、原因がわかりました。
> Fillメソッドによって、SQLの実行結果は、ds.Tables[0]の末尾に追加されていくので、
> 見かけ上はそういう動作になってるですね。
> 「実行前と比べて行数の変化が無いか」という判定方法にするか、
> ループ内で毎回DataSetをnew(または中身をClear)するかどっちかしないといけませんね。

ループ内でDataSetをnew、Clear両方試してみましたが最後の1行が1件表示されるだけでした。

いろいろ試してみて
if(ds2.Tables[0].Rows[i].Table.Rows[i].ItemArray[0].ToString() == "")
でDataSetの中身を見て、結果が無い場合を分岐させようとしたのですが
上記の箇所で

行6がありません。といった形のエラーが出てきてしました。

引用返信 編集キー/
■9335 / inTopicNo.10)  Re[9]: SQLの結果が無い場合は0を表示させたい
□投稿者/ ぼのぼの (111回)-(2007/10/24(Wed) 18:59:50)
No9330 (霞 さん) に返信
> ループ内でDataSetをnew、Clear両方試してみましたが最後の1行が1件表示されるだけでした。

あーそっか、画面に表示することまで考えるとループ内でnewしない方がいいっすね。
処理の流れとして、こんな感じにすると良いのではないでしょうか。

DataSetをにゅー

SQLの数だけループ {
    Fillメソッド実行(ここでSQLの結果があれば末尾に追加される)
    if(実行結果の件数が実行前と同じ) {
        DataTableの末尾に新規行を自前で追加してその行の先頭列に0を設定
    }
}

DataSetをDataGridにでーたばいんど

引用返信 編集キー/
■9356 / inTopicNo.11)  Re[10]: SQLの結果が無い場合は0を表示させたい
□投稿者/ 霞 (7回)-(2007/10/25(Thu) 09:33:05)
No9335 (ぼのぼの さん) に返信
> ■No9330 (霞 さん) に返信
>>ループ内でDataSetをnew、Clear両方試してみましたが最後の1行が1件表示されるだけでした。
>
> あーそっか、画面に表示することまで考えるとループ内でnewしない方がいいっすね。
> 処理の流れとして、こんな感じにすると良いのではないでしょうか。
>
> DataSetをにゅー
>
> SQLの数だけループ {
> Fillメソッド実行(ここでSQLの結果があれば末尾に追加される)
> if(実行結果の件数が実行前と同じ) {
> DataTableの末尾に新規行を自前で追加してその行の先頭列に0を設定
> }
> }
>
> DataSetをDataGridにでーたばいんど


なるほど、自前で行を追加するのですね。
ds.Tables[0].NewRow();
と打ってみたのですが結果は変わらずでした。
何か別の方法でやるものなのでしょうか?
引用返信 編集キー/
■9361 / inTopicNo.12)  Re[11]: SQLの結果が無い場合は0を表示させたい
□投稿者/ ぼのぼの (112回)-(2007/10/25(Thu) 10:20:06)
No9356 (霞 さん) に返信
> なるほど、自前で行を追加するのですね。
> ds.Tables[0].NewRow();
> と打ってみたのですが結果は変わらずでした。
> 何か別の方法でやるものなのでしょうか?

NewRowの戻り値をRows.Addの引数につっこみます。
つっこむ前に0を設定しとくと良いでしょう。
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -