2016-10-14 2 views
0

У меня есть gridview, который отображает данные из базы данных. В одной из таблиц в этой базе данных есть столбец до . Подробная информация о файле настроек. Если приложение доступно, значение столбца будет установлено как «ДА». В противном случае будет установлен как «НЕТ». Я хочу сделать это, показать ссылку для просмотра вложения. Но если значение ячейки столбца «НЕТ» (когда нет вложения), ссылка должна быть скрыта.Как спрятать ссылку в ячейке сетки?

Примечание: Я знаю, как просмотреть файл. Здесь я ожидаю скрыть ссылку в ячейке, у которой нет вложения.

Это то, что я сделал до настоящего времени.

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

Я помню, что я мог разбираться в виде сетки, используя для каждого из строк строки и используя оператор for для столбцов. Если я правильно помню, вы можете получить элемент т.е. row.Item [я]

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 для просмотра по ссылке, которую вы хотите чтобы показать и установить видимость элемента управления в соответствии с вашим требованием в событии gridview.

Ниже приведен код, показывающий/скрывающий LinkButton на мероприятии OnRowDataBound.

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

В соответствии с вопросом, который вы обновили, вы можете найти ярлык и, как мы это делали для linkbutton в RowDataBound, и проверить соответствующий текст этой метки, чтобы установить видимость linkbutton. –

Смежные вопросы