2017-07-29 11 views
0

ユーザー名とプロフィール写真などを含むグリッドを表示しています。 プロフィール写真をアップロードしていない場合は、以下のコードをimgPicに設定しています。 ImageUrl = "〜/ files/images/blankProfilePic.png"GridViewの列の内容をVBコードから変更する

ただし、これは6ページのデータの最初のページにのみ表示されます.. 2ページ目に切り替えると、以下のコードは、表示される最初のページに対してのみ機能しています。 このコードは、ページが読み込まれたときにのみ呼び出されるため、すべてのページで機能するように変更する必要があります。

VBコード


Protected Sub Page_LoadComplete(sender As Object, e As System.EventArgs) Handles Me.LoadComplete 

    Dim acc As New accounts(Membership.GetUser.ProviderUserKey) 

    If acc.region = "North East" Then 
     For Each r As GridViewRow in gdvNorthEast.Rows 
      If r.RowType = DataControlRowType.DataRow Then 
       Dim imgPic As Image 
       imgPic = r.Cells(4).FindControl("imgProfilePic") 
       If imgPic.ImageUrl = "~/catalog/images/"                                   
        imgPic.ImageUrl = "~/files/images/blankProfilePic.png" 
       End If 
      End If 
     Next r 
    End If 

ASP.NET


<asp:SqlDataSource 
    ID="DSLeaderboardNorthEast" 
    runat="server" 
    ConnectionString="<%$ ConnectionStrings:DBConnectionString %>" 
    SelectCommand="SELECT tblAccounts.contactName, tblAccounts.profilePic, tblAccounts.minAge, tblAccounts.maxAge, tblAccounts.AccountID, tblAccounts.region 
        FROM tblAccounts 
        WHERE tblAccounts.region='North East' 
        ORDER BY tblAccounts.contactName "> 
</asp:SqlDataSource> 

<asp:GridView ID="gdvNorthEast" width="100%" runat="server" AllowPaging="True" AutoGenerateColumns="False" CssClass="mGrid" DataKeyNames="accountID" DataSourceID="DSLeaderboardNorthEast" PageSize="20" AllowSorting="True"> 
    <AlternatingRowStyle CssClass="alt" /> 
    <Columns> 
     <asp:TemplateField ShowHeader="False"> 
      <ItemTemplate> 
       <asp:Image ID="imgProfilePic" AlternateText="Players profile picture" runat="server" width="100px" height="100px" ImageUrl='<%# "~/catalog/images/" & Eval("ProfilePic").ToString %>' /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:BoundField DataField="contactName" HeaderText="Player Name" />  
     <asp:BoundField DataField="minAge" HeaderText="Won" /> 
     <asp:BoundField DataField="maxAge" HeaderText="Lost" /> 
     <asp:TemplateField ShowHeader="False"> 
      <ItemTemplate> 
        <asp:HyperLink ID="hypMessage" runat="server" CssClass="nyroModalMsg" NavigateUrl='<%# "~/sendLeaderboardMessage.aspx?" & "&aID=" & Eval("accountID").ToString %>'>Msg</asp:HyperLink> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 
+0

可能な重複従って、助けていないので(https://stackoverflow.com/questions/5232214/gridview [GridViewのは、VBのアクセスデータ項目をrowdatabound] -rowdatabound-access-data-items-vb) –

答えて

0

あなたのforeachのために使用するためにGridview_RowDataBoundイベントを使用します〜のためのループデフォルトイメージを割り当てることは、再利用可能なメソッドでなければなりません。

PageIndexChangedイベントハンドラを使用すると、同じ再利用可能なメソッドを呼び出すことができます。

更新: 上記のオプションはのthis post

//RowDataBound Event 
protected void gdvNorthEast_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    //Checking the RowType of the Row 
    if(e.Row.RowType==DataControlRowType.DataRow) 
    { 
     //your logic goes here without foreach loop 
    } 
} 
+0

ああ、それは理にかなっています。私はPageIndexChangedについて調査します。私はPage_LoadCompleteで試しましたが、うまくいきませんでした。私はほとんどそこにいました;-) –

+0

私は間違った場所に投稿している場合は申し訳ありません。私のトリッキーですが、私は上記のようにPageindexchangedでそれを得ることはできません。それ以上の助けをいただければ幸いです。 –

+0

ブレークポイントとデバッグを入れてください。エラーメッセージが表示されたら教えてください –

0

置換の機能ではなく、命令

+0

「ページロードを使用する」とはどういう意味ですか? –

+0

ありがとう@fabioTos私はそれを行う方法が完全にはわかりません。私がちょうど学んでいるように、このコードの多くは私のために書かれました。 Forをどこに追加するか正確に教えてください。 –

+0

彼は、Page_LoadCompleteイベントの代わりにRowDataBoundイベントを使用する必要があることを意味しました。これは別の選択肢です。 –