質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

ASP.NET MVC Framework

ASP.NET MVC Frameworkは、MVCパターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。

Q&A

解決済

1回答

1038閲覧

【C#】MVCモデルにおいてプログレスバーを利用する方法

wing-1216

総合スコア18

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

ASP.NET MVC Framework

ASP.NET MVC Frameworkは、MVCパターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。

0グッド

0クリップ

投稿2022/09/26 05:02

編集2022/09/26 05:39

環境・前提

OS:Windows 11
DB:SQLserver
.NET Framework:.NET 6.0

C#初心者です。
課題の一環で、SQLserverを利用してMVCモデルの社員情報管理システムを作ることになりました。

実現したいこと

DBの処理を行っている際の進行状況をプログレスバーで表示する。

発生している問題①

プログレスバーの実装方法を調べたところ、Formを利用した実装方法の記述しか見つけることができず困っています。
処理の実行確認やメッセージはMsgBoxと自作(予定)のダイアログボックスクラスを使って新しいウィンドウを開く予定なのですが、プログレスバーを実装したダイアログボックスのようなものは自作することが可能なのでしょうか?

発生している問題②

調べた中で、delegateやイベントハンドラについてはおそらく基本的な使い方程度は理解できたと思います。
参考にさせていただいた各サイトではプログレスバーにイベントハンドラを利用していたのですが、メソッド(下記参照)の途中でイベントが発生させられない形になりそうだと考えているのですが、イベントハンドラを利用しない実装方法はできますか?

処理手順

コードを記述しておらず設計書として自然言語で作成したものなので分かりにくいと思いますが簡単に記述しておきます。

BasicProcess

1csvファイルを選択する。 2csvのデータのフォーマットを検査する。 3問題なければMsgBoxでDBに書き込むか確認する。 4トランザクション開始 5テーブル①に書き込む 6テーブル②に書き込む 7テーブル③に書き込む 8コミット 9MsgBoxで完了通知

このような流れで処理を行う予定なのですが、テーブル毎の処理を別のプログレスバーで実装したいと考えています。

補足情報

mvcなのにDBを直接操作するメソッドを作っているのはcsvファイルを扱った経験がなく、サイトを参考にした結果この形なら実装できると考えたからです。mvcモデルに適したやり方があればこちらもご教授いただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/09/26 05:10

ASP.NET のタグも付けてください。
wing-1216

2022/09/26 05:21

ASP.NET MVC Frameworkのタグがありそちらのほうが状況にあっているのではないかと考えたのですが、どうなんでしょうか?teratailを利用したのが初めてなのでご教授いただけると助かります。 また、本質問内容にもご協力いただけると助かります。
m.ts10806

2022/09/26 05:32

細かくて申し訳ないですが、更新履歴は一通り別のリンクから確認できるので、 質問本文に割かなくて良いです。 (タイトル下の投稿日時の隣に「編集」でリンクになっています)
退会済みユーザー

退会済みユーザー

2022/09/26 05:35

ASP.NET MVC Framework は普段見てないので何か返事などがあっても見逃すことが多々あるので、自分が普段見ている ASP.NET のタグも付けてくださいと言うお願いです。
wing-1216

2022/09/26 05:37

更新履歴わかるんですね知りませんでした。。。 タグの件も承知いたしました。そのような理由であれば喜んで変更させていただきます。
m.ts10806

2022/09/26 05:39

いえ、そもそも指摘に対して一切応待しない・答えしか求めてない という人も一定いるので かなり丁寧で良いと思いました(※先に謝っておけばよかったですが、すみません。私がこの質問に答えられるかはまた別の話です)
wing-1216

2022/09/26 05:45

正直に話しますと、タグだけの更新ができなかったから本文も更新した形です。 質問しているのはこちらですし、C#の開発経験がほとんどない状況で設計書から作ることになって困っているので回答してもらうためにもできる限り誠意ある対応をしたいと思っています。 teratailのアドバイスだけでも勉強になりました。ありがとうございます。
退会済みユーザー

退会済みユーザー

2022/09/26 06:02 編集

プログレスバーを使ってサーバー側の処理が何 % 終了したかをクライアント側でブラウザに表示するのは web アプリではかなり無理があります。そもそも、SQL Server 内部での処理が何 % 終わったかのプログレス情報はどうやって取得するつもりですか? 非同期で要求を出して応答が返ってくるまで「処理中です」というような表示を出すことなら比較的容易ですが、それではダメなのですか? こんな感じです⇒ http://surferonwww.info/Test/21_Test.aspx
wing-1216

2022/09/26 06:32

基本的にこちらのサイトを参考にすれば実装できるのではないかと考えています。→https://dobon.net/vb/dotnet/programing/displayprogress.html 見出し:.NET Framework 2.0以降で、BackgroundWorkerコンポーネントを使用する方法 DoWorkイベントハンドラ、ProgressChangedイベントハンドラ DBに書き込むループの中にこれらのイベントハンドラをどうにかしていれられないかなと質問した次第です。 先方にはプログレスバーを実装してほしいとのことだったのでやり方を模索しておりました。 ご提示いただいたような処理中であることを表示するような形でも受け入れてもらえるかどうか確認いたしますが、プログレスバーで実装してほしいといわれた場合のためにもう少しお付き合いいただきたく存じます。
wing-1216

2022/09/26 06:34

あらかじめ参考にしたサイトとして明記しておけばよかったですね。申し訳ありません。
退会済みユーザー

退会済みユーザー

2022/09/26 06:42

> 基本的にこちらのサイトを参考にすれば実装できるのではないかと考えています。 > https://dobon.net/vb/dotnet/programing/displayprogress.html できません。その記事は Windows Forms アプリの話です。Web アプリと違って、すべてがユーザーの PC の中で動いているからそういうことができるのです。 MsgBox とかイベントハンドラとかの話が出てくるということは、質問者さんは Web アプリの基本的なことが理解できてない初学者の方と想像していますが、そうだとすると話が通じにくいと思います。まずは、Web アプリの基本的なことを勉強されることをお勧めします。
wing-1216

2022/09/26 06:56

Windows フォームアプリの話でmvcだと実装できないようなのでmvcでもできるやり方があるか質問していたのですがやはり厳しいようですね。 質問内容だけでなくMsgBoxなどもフォームアプリ側に属していてWebアプリでは利用できないとは知りませんでした。C#にメソッドがあるから利用できると考えていたのですが調べ方が甘かったようです。勉強になりました。ありがとうございます。 先ほどご教授いただけた http://surferonwww.info/Test/21_Test.aspx こちらのサイトのコードを拝見したところイベントハンドラを使っているように読み取ったのですがこちらも実装するのは不可能ということになりますか?
退会済みユーザー

退会済みユーザー

2022/09/26 07:38 編集

> 質問内容だけでなくMsgBoxなどもフォームアプリ側に属していてWebアプリでは利用できないとは知りませんでした。 Web アプリはステートレスであることを理解する、サーバー側で起こっていることとクライアント側で起こっていることをしっかり区別して考える・・・ようにしましょう。MsgBox と言うのはどこの話か分かりますか? サーバー側ですよね。そんなの表示しても(実際には表示できませんが)クライアントは見えないので意味がないですよね。 > 先ほどご教授いただけた http://surferonwww.info/Test/21_Test.aspx こちらのサイトのコードを拝見したところイベントハンドラを使っているように読み取ったのですがこちらも実装するのは不可能ということになりますか? そのイベントはクライアントの JavaScript で発生するものです。JavaScript で ajax を使って要求を出した時のイベント、応答が返ってきたときのイベントを使ってすべてクライアント側で処理しています。それならばもちろんできます。なので上のコメントで、 > 非同期で要求を出して応答が返ってくるまで「処理中です」というような表示を出すことなら比較的容易です と言いました。 PS 紹介した記事のコードの Button_Click だけはサーバー側の C# のイベントハンドラです。旧来の Web Forms アプリなので、サーバーコントロール、ポストバック、ビューステートという特殊な手段を用いてイベントドリブンな Web アプリを実現しています。MVC ではそれらは使えません。
wing-1216

2022/09/26 07:46

ASP.NETはサーバーサイドだから不可能だということですね。 サーバーサイドとクライアントサイドを意識して作成する経験がなかったので大変勉強になりました。 HTMLやJavaScriptを利用してメッセージを表示するよう仕様を変更したいと思います。 プログレスバーに関してはご提示いただいたサイトのように処理中であることを知らせる形で実装できるように先方と話をつめてみます。 長い間お付き合いいただきありがとうございました。
退会済みユーザー

退会済みユーザー

2022/09/26 22:45

> ASP.NETはサーバーサイドだから不可能だということですね。 その言葉を聞くと、今まで私が上のコメントに書いたことがほとんど理解されてないのではないかと思ってしまいます。 くどいようですが、(1) Web アプリはステートレスであることを理解する、(2) サーバー側で起こっていることとクライアント側で起こっていることをしっかり区別して考える・・・ようにしましょう。 上の (1), (2) を 100% 理解するのが基本のキで、それができてないとまたハマること間違いなしです。
wing-1216

2022/09/27 00:11

要約したつもりだったのですがかえって悪い文章になってしまいました・・・ たしかにASP.NETはサーバーサイドという発言はよくなかったですね、そう思われるのも無理はないと思います。 今回の問題の大元は(2)のように、私が想定しているコードの処理が行われる場所がサーバー上なのかクライアントのブラウザ上なのかということを理解できていなかった点、またそこにまつわる仕様への理解不足だと考えます。 つまることがないようステートレスであることも念頭に置いて設計したいと思います。
guest

回答1

0

自己解決

プログレスバーの実装はwebアプリケーションだと難しいことが分かりました。
サーバーサイドとクライアントサイドへの知識不足が原因です。
大変勉強になりました。ご助言いただいた皆様ありがとうございます。

投稿2022/09/26 07:50

wing-1216

総合スコア18

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問