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

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

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

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

C#

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

ASP.NET

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

Q&A

解決済

2回答

4609閲覧

ASP.NET 社内webシステムを作成したい

Yamato-Suzuki

総合スコア18

VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

C#

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

ASP.NET

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

0グッド

0クリップ

投稿2017/03/26 23:33

###前提・実現したいこと
ASP.NET Webフォーム を利用しまして、
社内用のwebアプリケーションを作成したいと考えています。

Webアプリケーションの内容は、

事前にデータベース(SQL Server) に

ファイル名 保存先
A001.xlsx \serverA\品質
A002.xlsx \serverC\管理
B001.docx \serverB\運用

といったように、ファイル名をキーに 保存先も登録しておき

Webアプリケーションの画面から
ファイル名を検索しますと、

GridView上 にファイル名一覧と詳細ボタンが表示され
詳細ボタンを押すと対象ファイルが開く。
というページを作成したいです。

画面イメージとして、

テキストボックスに :A と入力して "検索" ボタンを押す

A001 詳細
A002 詳細

と表示され、"詳細"(ButtonField) を押すと 対象ファイルが開く。
この際、GridViewに保存先は表示しません。

と実施したいのですが、
このButtonField イベントをどのようなソースをどこに記載していいかが不明です。

画面イメージは完了しています。
ASP.NET が初心者のため、素人の質問で誠に恐縮です。

ご不明点は記載いたしますので、どうかご教示いただきたく存じます。
よろしくお願いします。

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

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

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

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

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

guest

回答2

0

ファイルパスを管理する方法は、ファイル実体の移動や更新、ロックなどとても面倒です。
SQL Server 2012 以降なら FileTable それより前のバージョンなら FileStream を使うことをお勧めします。
下記はCodeZine様のページへのリンクです。
SQL Server開発の利便性を向上させるFileTable/シーケンスオブジェクト/ページング機能

投稿2017/03/27 01:57

hihijiji

総合スコア4150

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

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

Yamato-Suzuki

2017/03/27 02:39

ご回答ありがとうございます。ファイルサーバ側の管理者もしておりますので、ファイル実体を移動、更新することはないようにしてあります。 過去より、データベースに保存先を記述する情報が残っておりますので、この資産を生かしつつ、webフォームを構築するところで苦戦しているところではあります。
guest

0

ベストアンサー

以下の記事のように GridView に一覧を表示、DetailsView で編集を行うイメージですか?

GridViewとDetailsViewでデータ管理ページを作成する
https://codezine.jp/article/detail/379

質問者さんのやりたいことと違う場合は、具体的にどこがどのように違うのか書いてください。

***************** 追記 *****************

2017/03/27 14:06 のコメントに「Button を使った例を回答欄に追記しておきます。」と書きましたが、それを以下に追記します。

データソースコントロールに SqlDataSource を使用し、その ID を GridView の DataSourceID に設定して使うとします。

GridView では、ButtonField ではなく、Template に Button コントロールを配置してそれを使います(そちらの方が自分的には簡単なので)。

以下のような SELECT クエリでフルバス+ファイル名.拡張子の文字列が FileName として取得できるとします。

SELECT DocumentID, Title, FileName FROM Production.[Document]

その条件で、以下のようなコードを書けば Button クリックでダウンロードされるはずです。

<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> protected void Button1_Click(object sender, EventArgs e) { if (((Button)sender).CommandName == "download") { string filename = ((Button)sender).CommandArgument; // filename にファイルのパスが取得できる。それを使って以下にファイルをダウンロード // するためのコードを書く。 // 注意事項としては: // キャッシュを許可するか否か、許可する場合は有効期限を指定しておく。 // Content-Disposition: attachment; filename= で指定するファイル名.拡張子、 // Content-Type: で指定する MIME Type は両方とも正確に設定すること。 // 日本語のファイル名は文字化けに注意。 // ファイルのダウンロードは TransmitFile メソッドを使うのがお勧め。 // .aspx ページのメソッドを使う場合は Response.End() を忘れずに。 } } </script> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:AdventureWorks %>" SelectCommand="SELECT DocumentID, Title, FileName FROM Production.[Document]" > </asp:SqlDataSource> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="DocumentID" DataSourceID="SqlDataSource1"> <Columns> <asp:TemplateField> <ItemTemplate> <asp:Button ID="Button1" runat="server" Text="Button" CommandName="download" CommandArgument='<%# Eval("FileName") %>' OnClick="Button1_Click" /> </ItemTemplate> </asp:TemplateField> <asp:BoundField DataField="DocumentID" HeaderText="DocumentID" InsertVisible="False" ReadOnly="True" SortExpression="DocumentID" /> <asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" /> </Columns> </asp:GridView> </form> </body> </html>

もし、質問者さんの SQL Server データベースの [テーブル] では [保存先] (パス)と [ファイル名] (ファイル名.拡張子)というフィールドが別々になっている場合は以下のようにクエリを工夫してください。

SELECT ... ([保存先] + "" + [ファイル名]) AS FileName FROM [テーブル]

投稿2017/03/27 00:54

編集2017/03/27 05:31
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Yamato-Suzuki

2017/03/27 02:37

ご回答ありがとうございます。 GridView 内 の Button "詳細" により、データベースに記述している保存先のファイル(エクセル、ワード)を 開く。(webページではなく、エクセル、ワードとして)をしたいと考えていますが、質問の回答になっておりますでしょうか。
退会済みユーザー

退会済みユーザー

2017/03/27 02:56 編集

Excel, Word ファイルはファイルサーバーの共有フォルダにあるようですが、それをユーザーがブラウザ上で表示することはできません。 一旦ダウンロードしてもらって、ダウンロードしたファイルをユーザーの PC にインストールしてある Excel, Word で開いて見るという形になります。(Excel 2003, Word 2003 以前ならブラウザのプラグインとして表示できますが) ダウンロードするにも IIS のワーカープロセスが保存フォルダに対してアクセス権を持っている必要があります。 もし、ユーザーが Excel, Word ファイルを編集して、編集結果を元のファイルサーバーの共有フォルダのファイルに反映したいということがあれば、ユーザーの PC から編集後のファイルをサーバーにアップロードして差し替えるという操作が必要になります。 そのあたり多分考えておられないと思いますが、いかがですか?
Yamato-Suzuki

2017/03/27 03:04

ありがとうございます。 一旦ダウンロードしてもらって、ダウンロード(”開く”,”保存") の選択で行う予定であります。 ファイルサーバにが、IISのワーカプロセスが読み取り専用の権限を持っております。 読み取り専用ですので、編集することはありません。 あらたにアップロードする際は、アップロードアプリケーションにより追番の変更などで別ファイル名としてアップロードするルールになっております。回答としてよろしかったでしょうか。 ButtonField のイベント記述をご教示いただけますと幸いです。どうかよろしくお願いいたします
退会済みユーザー

退会済みユーザー

2017/03/27 05:06

Button を使った例を回答欄に追記しておきます。
Yamato-Suzuki

2021/09/23 08:31

今頃の回答で申し訳ありません。 こちら対応できましたことを報告いたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問