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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.62142 の関連記事表示

<< 0 >>
■62142  ファイルの存在有無により処理を変えたい
□投稿者/ はむ -(2011/09/24(Sat) 13:19:46)

    分類:[ASP.NET (VB)] 

    はじめまして。はむと申します。
    サーバにファイルを置いてDatagridからそのファイルにリンクを張る処理を作成しています。

    その処理のなかでファイルが存在しない場合は、当該セルを空文字にし
    存在する場合は、リンクを貼り『確認』と表示させる処理を作ろうと思い
    いろいろ試したのですが、うまくいかず今にいたっています。
    どのように処理すればよいかご教授願います。

    また勉強中の身なのでこのようにやった方がよいのでは?という
    ご指摘もいただければ幸いです。

    以下、ソースになります。

    -----------------------
    Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs)Handles DataGrid1.ItemDataBound
    Dim folderpath As String = "c:\hoge\" 'フォルダ文字列
    Dim filepath As String 'ファイルパスを格納
    Dim i As Integer '行をカウント



    For i = 0 To dt.Rows.Count - 1

    filepath = folderpath & dt.Rows(i)("会社CD") & ".pdf" 'ファイルパスをいれる

    If File.Exists(filepath) Then 'ファイルは存在する

    'ファイルが存在する場合、DataGridのB列(ハイパーリンク列)にfilepathのリンクを貼り確認と表示
    'テンプレート列じゃないと無理?

    'DataGrid1.Items(i).Cells(1).Text() = "確認"と書くと
    'ArgumentOutOfRangeException:Index was out of rangeというエラーが出て進めません。

    'e.Item.Cells(1).Text = "確認"だと全て『確認』になりリンクも解除されてしまいました。


    Else 'ファイルは存在しない

    'DataGridのB列に空文字を表示

    End If
    Next

    End Sub
    -------------------------

    以上、よろしくお願いします。
親記事 /過去ログ104より / 関連記事表示
削除チェック/

■62143  Re[1]: ファイルの存在有無により処理を変えたい
□投稿者/ shu -(2011/09/24(Sat) 13:59:59)
    2011/09/24(Sat) 14:00:29 編集(投稿者)

    No62142 (はむ さん) に返信

    > 'ArgumentOutOfRangeException:Index was out of rangeというエラーが出て進めません。
    >
    > 'e.Item.Cells(1).Text = "確認"だと全て『確認』になりリンクも解除されてしまいました。

    e.Item.Cells(1).NavigateUrl = "リンク先"
    でどうでしょう?
記事No.62142 のレス /過去ログ104より / 関連記事表示
削除チェック/

■62164  Re[2]: ファイルの存在有無により処理を変えたい
□投稿者/ はむ -(2011/09/26(Mon) 10:19:33)
    shu様、ご回答ありがとうございます。
    > e.Item.Cells(1).NavigateUrl = "リンク先"
    > でどうでしょう?
    
    NavigateUrlはSystem.Web.UI.WebControls.TableCellのメンバではありません。
    とでました。
    
    色々調べてHyperLinkColumn(hlcとつけました)オブジェクトを作成しては?
    思いやってみましたがやはり列全体に適用されてダメでした。
    
    
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;'---ファイルが存在する場合
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;hlc.Text&#160;=&#160;"確認"
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;hlc.DataNavigateUrlField&#160;=&#160;"会社CD"
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;hlc.NavigateUrl&#160;=&#160;"{0}.pdf"
    
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;'---ファイルが存在しない場合
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;hlc.Text&#160;=&#160;""
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;hlc.DataNavigateUrlField&#160;=&#160;""
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;hlc.NavigateUrl&#160;=&#160;""
    
    そもそもなぜ行ごとに処理されない。。。
    IF分で分岐されているのは確認しております。。
    根本的に勘違いしていると思うのですが、そこが分かりません。
    
    
    あと環境を記載したつもりでしたが記載しておりませんでした。
    申し訳ありません。
    
    環境:ASP.NET1.1&#160;VS2002
    
    以上、よろしくお願いいたします。
記事No.62142 のレス /過去ログ104より / 関連記事表示
削除チェック/

■62165  Re[3]: ファイルの存在有無により処理を変えたい
□投稿者/ shu -(2011/09/26(Mon) 11:06:50)
    No62164 (はむ さん) に返信
    > shu様、ご回答ありがとうございます。
    >>e.Item.Cells(1).NavigateUrl = "リンク先"
    >>でどうでしょう?
    >
    > NavigateUrlはSystem.Web.UI.WebControls.TableCellのメンバではありません。
    > とでました。

    失礼しました。勘違いしていたようです。

    http://www.atmarkit.co.jp/fdotnet/dotnettips/067linksdg/linksdg.html
    を参考にすると出来るかもしれません。
記事No.62142 のレス /過去ログ104より / 関連記事表示
削除チェック/

■62171  Re[4]: ファイルの存在有無により処理を変えたい
□投稿者/ はむ -(2011/09/26(Mon) 16:41:17)
    shu様、たびたび回答いただいてありがとうございます。
    リンク先を参照し、テンプレート列にて処理してみました。
    とりあえずテキストだけの変更をテストしてみましたが、やはり最後に処理されたデータが
    列全体に反映されます。。(以下の例だと全て"ng"となる)
    
    ただ一歩前進したのは、テキストのみが変更され、リンクは解除されなくなりました!
    あとはファイルの存在有無で行ごとに処理してくれればいいのですが。
    
    ループ処理の中に入れているからなのでしょうか?
    
    
    -----------------------
    
        Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs)Handles DataGrid1.ItemDataBound
            Dim folderpath As String = "c:\hoge\"	'フォルダ文字列
            Dim filepath As String	'ファイルパスを格納
            Dim i As Integer	'行をカウント
            Dim hl As New HyperLink()
            
    		
    	hl = e.Item.FindControl("HyperLink1")
    		
        If Not hl Is Nothing Then
    
            For i = 0 To dt.Rows.Count - 1
    
                filepath = folderpath & dt.Rows(i)("会社CD") & ".pdf" 'ファイルパスをいれる
    
                If File.Exists(filepath) Then	'ファイルは存在する
                    
                    hl.Text = "ok"
                    
                    
                    'ファイルが存在する場合、DataGridのB列(ハイパーリンク列)にfilepathのリンクを貼り確認と表示
                    'テンプレート列じゃないと無理?
    
    		'DataGrid1.Items(i).Cells(1).Text() = "確認"と書くと
    		'ArgumentOutOfRangeException:Index was out of rangeというエラーが出て進めません。
    
    		'e.Item.Cells(1).Text = "確認"だと全て『確認』になりリンクも解除されてしまいました。
                    
                    
                Else	'ファイルは存在しない
                
                	hl.Text = "ng"
    
                	'DataGridのB列に空文字を表示
                    
                End If
            Next
            
        End If
    
        End Sub
    
    -------------------------
    
    以上、よろしくお願いします。
    
    
    ■No62165 (shu さん) に返信
    > ■No62164 (はむ さん) に返信
    >>shu様、ご回答ありがとうございます。
    > >>e.Item.Cells(1).NavigateUrl = "リンク先"
    > >>でどうでしょう?
    >>
    >>NavigateUrlはSystem.Web.UI.WebControls.TableCellのメンバではありません。
    >>とでました。
    > 
    > 失礼しました。勘違いしていたようです。
    > 
    > http://www.atmarkit.co.jp/fdotnet/dotnettips/067linksdg/linksdg.html
    > を参考にすると出来るかもしれません。
記事No.62142 のレス /過去ログ104より / 関連記事表示
削除チェック/

■62200  Re[5]: ファイルの存在有無により処理を変えたい
□投稿者/ はむ -(2011/09/28(Wed) 02:02:05)
    はむです。
    その後テンプレート列を調べ色々試してみましたが、やはり行ごとに処理をわけることはできませんでした。
    やり方を変えてみようと思い、Datagridのセルを指定してそのテキストを変更してみようと試しているのですが
    ★の箇所で以下のエラーがでます。
    
    [ArgumentOutOfRangeException: Index was out of range.  Must be non-negative and less than the size of the collection.
    Parameter name: index]
    
    調べた所、インデックスが範囲外というエラーということがわかり
    範囲外のインデックスを指定した場合やコレクション(インスタンス?)などが生成されていない時に出るものだと言うことまで分かりました。
    ステップで実行し、i=0で止まるのでインデックスが理由ではないと思っています。
    
    後者の理由だと思いますが、自分でも調べて試してみたつもりですが、結局解消されずどのように対応してよいか分からず悩んでいます。
    どのように対応するべきなのか、識者の方ご教授いただけますようお願いします。
    (件名と内容が離れて初めているので別のトピックスにした方がよいだろうか。。)
    
    以上、よろしくお願いいたします。
    
    
        Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs)Handles DataGrid1.ItemDataBound
            Dim folderpath As String = "c:\hoge\"	'フォルダ文字列
            Dim filepath As String	'ファイルパスを格納
            Dim i As Integer	'行をカウント
            Dim ditem As DataGridItemCollection
    
          ditem = DataGrid1.Items
    
            For i = 0 To dt.Rows.Count - 1
    
                filepath = folderpath & dt.Rows(i)("会社CD") & ".pdf" 'ファイルパスをいれる
    
                If File.Exists(chk_kyotei) Then
                    ditem.Item(i).Cells(1).Text = "確認"  '-----------★
    
                    'filePathのファイルは存在する
                    'DataGrid1.Items(i).Cells(1).Text() = "確認"
    
    
                Else
                    ditem.Item(i).Cells(1).Text = ""  '------------★
    
                    'filePathのファイルは存在しない
    
                    'e.Item.ForeColor = Color.FromName("blue")
    
                End If
       End SUb
記事No.62142 のレス /過去ログ104より / 関連記事表示
削除チェック/

■62201  Re[6]: ファイルの存在有無により処理を変えたい
□投稿者/ shu -(2011/09/28(Wed) 07:17:57)
    No62200 (はむ さん) に返信

    提示したリンク先の

    NavigateUrl='<%# DataBinder.Eval(Container.DataItem, "id", "result.aspx?target={0}") %>

    この辺かなと思ったんですが駄目でしたか?
記事No.62142 のレス /過去ログ104より / 関連記事表示
削除チェック/

■62231  Re[7]: ファイルの存在有無により処理を変えたい
□投稿者/ はむ -(2011/09/29(Thu) 01:37:41)
    No62201 (shu さん) に返信
    > NavigateUrl='<%# DataBinder.Eval(Container.DataItem, "id", "result.aspx?target={0}") %>
    > 
    > この辺かなと思ったんですが駄目でしたか?
    はむです。
    返信ありがとうございます。
    
    教えていただいたリンク先の情報やDataBinder.Evalの関連情報を元にItemTemplateに設定してみた(Text=〜の箇所)のですが
    SqlException: SQL Server does not exist or access denied.というエラーで先に進めず断念してしまいました。
    この箇所の記述の仕方は色々あるようで、一通り試したのですがすべてエラーで動きませんでした。元のText="確認"とすると動きます。
    
    ちなみに『NavigateUrl=〜』の部分はハイパーリンク列からテンプレート列に変更した債に、自動変換されたものです。
    あたりまですがこちらは上手く動きます。
    そちらの記述と同様(hogeinfo以降は抜かして)に記述しても、Textでは動きませんでした。。
    他の方法も模索しつつ明日またチャレンジしてみます。
    
    記述方法に間違いがございましたらご指摘ください。
    
    
    
    <asp:TemplateColumn HeaderText="書類情報">
    	<ItemTemplate>
    		<asp:HyperLink runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "会社名") %>' NavigateUrl='<%# DataBinder.Eval(Container, "DataItem.会社CD", "hogeinfo/ha/kyotei/{0}.pdf") %>'>
    		</asp:HyperLink>	      
    	</ItemTemplate>
    </asp:TemplateColumn>
    
記事No.62142 のレス /過去ログ104より / 関連記事表示
削除チェック/

■62266  Re[8]: ファイルの存在有無により処理を変えたい
□投稿者/ はむ -(2011/09/30(Fri) 00:20:09)
    はむです。

    > 教えていただいたリンク先の情報やDataBinder.Evalの関連情報を元にItemTemplateに設定してみた(Text=〜の箇所)のですが
    > SqlException: SQL Server does not exist or access denied.というエラーで先に進めず断念してしまいました。
    このエラーですがサーバが丁度お亡くなりになったようで、そのためこのようなエラーが出たようです。
    DataBinder.Eval〜に関しては動作しました!
    その後試行錯誤しながら色々やりましたが行単位の処理はやはりできていない状況です。

    件名とやりたいことが余りにもかけ離れてしまったため、一度締めさせていただきます。
記事No.62142 のレス / END /過去ログ104より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -