2016-10-14 12 views
0

私はデータベースからのデータを表示するgridviewを持っています。このデータベースのテーブルの1つでは、アトリションファイルについての詳細は、のストアの列にあります。 添付ファイルが利用可能であれば、その列の値は "YES"と設定されます。 それ以外の場合は "NO"と設定されます。私がしたいことは、添付ファイルを見るためのリンクを表示することです。しかし、列のセル値が "NO"(アタッチメントがない場合)の場合、リンクは非表示にする必要があります。グリッドビューのセル内のリンクを非表示にするにはどうすればいいですか?

注:ファイルを表示する方法はわかっています。ここで期待しているのは、添付ファイルのないセル内のリンクを非表示にすることです。

これは私が今まで行ってきたことです。

if (ds.Tables[0].Rows.Count > 0) 
{ 
    grdSo.DataSource = ds; 
    grdSo.DataBind(); 
    for(int i=0; i <ds.Tables[0].Rows.Count; i++) 
    { 
      if (ds.Tables[0].Rows[i][6].Equals("NO")) 
      { 
       grdSo.Rows[i].Cells[6].Visible = false; 
      } 
     else 
     { 
       grdSo.Rows[i].Cells[6].Visible = true; 
     } 
    } 
}  

このコードを使用してセルを非表示にすることができます。しかし残念ながら、これはセルのラインも隠してしまいます。それを避けるにはどうすればいいですか?

答えて

1

ASPXコード:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" OnRowDataBound="GridView1_RowDataBound"> 
     <Columns> 
      <asp:BoundField Visible="false" DataField="id" /> 
      <asp:TemplateField HeaderText="Has Attachment"> 
       <ItemTemplate> 
        <asp:Label ID="lblAtt" runat="server" Text='<%#Eval("HasAtt") %>' /> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="View Attachment"> 
       <ItemTemplate> 
        <asp:LinkButton ID="lbtnAtt" runat="server" OnClick="lbtnAtt_Click" Visible="false">View</asp:LinkButton> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 

CSコード:これを行う方法の

protected void Page_Load(object sender, EventArgs e) 
    { 
     if(!IsPostBack) 
     { 
      this.BindGrid(); 
     } 
    } 

    private void BindGrid() 
    { 
     //Here you write databind logic 
     // Datasource table of GridView1 should contain 'HasAtt' and 'id' as its binded to label. 
    } 

    private void ViewAttachment(int id) 
    { 
     //Here you write your logic to view attachment. 
    } 

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if(e.Row.RowType == DataControlRowType.DataRow) // checking if row is datarow or not 
     { 
      Label lblHasAtt = e.Row.FindControl("lblAtt") as Label; 
      LinkButton lbtnViewAtt = e.Row.FindControl("lbtnAtt") as LinkButton; 
      lbtnViewAtt.Visible = (lblHasAtt.Text.ToLower() == "yes"); 
     } 
    } 

    protected void lbtnAtt_Click(object sender, EventArgs e) 
    { 
     LinkButton lbtnViewAtt = sender as LinkButton; 
     GridViewRow grw = lbtnViewAtt.NamingContainer as GridViewRow; 
     int id = Convert.ToInt32(this.GridView1.Rows[grw.RowIndex].Cells[0].Text); // retriving value of first column on 'lbtnAtt' click row. 
     this.ViewAttachment(id); 
    } 
1

グリッドビューを解析するには、行ごとにaを使用し、列に対してforステートメントを使用することができます。 私が正しくリコール場合は、アイテムをつかむことができる、すなわち row.Item [i]は

foreach(GridViewRow row in GridView1.Rows) 
{ 
    for(int i = 0; i < GridView1.Columns.Count; i++) 
    { 
     // here you can do the logic to decide whether to show or hide the text for this cell 
    } 
} 

申し訳ありませんが、私の携帯電話に応答フォーマットについて。

+0

@ブレット、私は私の質問にコードを追加しました。セルの値が隠されます。私はそれをもう一度見てください。 – Mike

+0

コントロールを動的に追加して、指定されたセル内のリンクを表示し、そのセルのテキストをアイテムに転送することもできます。そのアイテムは、visibleプロパティがfalseに設定されている可能性があります。@ user6592730 –

2

一つは、あなたが望むのリンクを表示するLinkButtonのようにサーバー側のコントロールを使用することです表示し、グリッドビューのOnRowDataBoundイベントでの要件に従って、コントロールの可視性を設定します。

以下は、OnRowDataBoundイベントでLinkBut​​tonを表示/非表示するためのコードです。

protected void gridId_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
      DataSourceClass varData = (DataSourceClass)e.Row.DataItem; 
      // check if your data have flag to show the link 
      if(varData.show) 
      ((LinkButton)e.Row.FindControl("linkbuttonId")).Visible = true; 
      else 
      ((LinkButton)e.Row.FindControl("linkbuttonId")).Visible = false; 
    } 
} 
+0

更新した質問に従って、ラベルを見つけて、RowDataBoundでlinkbuttonのようにして、そのラベルの関連テキストをチェックしてlinkbuttonの可視性を設定します。 –

関連する問題