2011-12-07 7 views
1

私のウェブサイトでは、現在、ステータス、Project_glance、Application_headerの3つのテーブルからデータを生成するグリッドビューを使用しています。 SQLクエリは4列を返しますが、グリッドビューでは3列しか表示しません。 STATUS_ID> 15はその後、唯一のビューのハイパーリンクが見えるが、そうでない場合の表示ハイパーリンクテキストは、「編集」に変更されますでしょう特定の条件に従ってグリッドビューにダイナミックハイパーリンクを追加する方法

<asp:GridView ID="grdProf" runat="server" AllowPaging="True" AutoGenerateColumns="false" OnPageIndexChanging="grdProf_PageIndexChanging"> 
<Columns> 
    <asp:TemplateField> 
     <ItemTemplate> 
      <asp:HyperLink ID="hlnkView" Visible="true" Text="View" runat="server" >  </asp:HyperLink> 
     </ItemTemplate> 
    </asp:TemplateField> 
    <asp:BoundField DataField="ApplicationID" HeaderText="ApplicantionID" /> 
    <asp:BoundField DataField="PRGLProjectTitle" HeaderText="Project Title" /> 
    <asp:BoundField DataField="Status" HeaderText="Project Status" /> 
</Columns> 
</asp:GridView> 

の場合と:最後の列には、次project.TheのSTATUS_IDが私の.aspxコードで返します。このハイパーリンクにナビゲートURLが追加され、別のハイパーリンク「削除」が表示され、ユーザーはプロジェクトの詳細を削除できます。

このため、正しい解決策を見つけるために私を助けてください..

+1

複数のサイトに同じ質問を投稿しないでください。これは移行され、今ではマージが必要です。すべてのコミュニティの他のメンバーとモデレーターのために働く。 – ChrisF

答えて

0

まず、あなたのItemTemplateにに削除ハイパーリンクを追加します。

次に、Status_idフィールドにアクセスできるようにするには、その値をGridViewのDataKeysに追加します。

GridViewのRowDataBoundメソッドをサブスクライブし、ハイパーリンクを取得し、status_idを確認し、それに応じてハイパーリンクの可視性を設定することができます。この

protected void grdProf_RowDataBound(Object sender, GridViewRowEventArgs e) 
{ 

if(e.Row.RowType == DataControlRowType.DataRow) 
{ 

    DataRowView rowView = (DataRowView)e.Row.DataItem; 

    // Retrieve the status value for the current row. 
    string status = rowView["Status"].ToString(); 
    //Now you have the status 
    //get a reference to view hyperlink and hide it if that's the case 
    Hyperlink hlnkView = e.Row.FindControl("hlnkView") as HyperLink; 
    //example: 
    if(int.Parse(status)>15) 
     hlnkView .Visible=false;//you are done 

} 
} 

同様

<asp:GridView DataKeyNames="status_id" 

<ItemTemplate> 
    <asp:HyperLink ID="hlnkView" Visible="true" Text="View" runat="server" > 
    <asp:HyperLink ID="hlnkDelete" Visible="false" Text="Delete" runat="server" > 
</asp:HyperLink> 

void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { 
    HyperLink delHl = e.Row.Cells[0].FindControl("hlnkDelete") as HyperLink; 
    int statusId = (int)(sender as GridView).DataKeys[e.Row.RowIndex].Value; 
    delHl.Visible = statusId <= 15; 
} 
+0

これは**インデックスが範囲外です**この行のエラー 'int statusid =(int)(GridViewのような送信者).DataKeys [e.Row.RowIndex] .Value;'。どうすればよいですか? – Nupur

+0

@Nupur GridView定義に 'DataKeyNames =" status_id "'を追加しましたか? –

+0

はいGridView定義でDataKeyNames = "status_id"を追加しました。 – Nupur

0

限り「編集」ハイパーリンクを表示するなど、私は次の「ビュー」の列に余分な列を持っているし、非表示にしたり、中から必要に応じて、この他のハイパーリンクを表示していました場合によっては1つのハイパーリンク列が必要になる場合もありますが、場合によっては2つ必要になります。

関連する問題