基于Bound Datatable的Cell值设置元素可见性

时间:2015-05-07 19:30:59

标签: c# asp.net gridview hyperlink datatable

我正在尝试根据绑定DataTable中的关联列找出GridView中的单元格可见的方式。我相信我遇到的问题是这个表是动态的,也许随着行添加到表中,表格不会在asp页面上重新填充/重新刷新。

以下是该方案: 我有一个表,例如,有三列和一行。第1列是索引,第2列是名称,第3列是true或false,用于设置asp页面中链接的可见性。

第1行已经设置为1, John Doe, false所以在asp页面上你看到的只有

  

1 | John Doe

您可以点击下拉列表,单击名称,然后将此名称添加到数据表中。默认情况下,第3列插入true值。因此,在将行插入表格后,该行将反映在asp页面上,如此

  

1 |约翰·多伊   2 |简·多伊

但是因为第3列是真的,我想要一个'删除'按钮是可见的,所以asp页面看起来会像这样

  

1 |约翰·多伊   2 | Jane Doe |删除

其中'删除'是删除新插入行的链接。

我发现this认为这正是我所需要的,但“删除”链接仍然无法在GridView中显示。

我忽略了什么,以便我可以根据asp:LinkButton中的单元格值显示DataTable(或任何等效的链接)?

修改

添加RowDataBound事件处理程序函数。

protected void NamesGV_RowDataBound(object sender, GridViewRowEventArgs e) {
    if (e.Row.RowType == DataControlRowType.Header) {
        for (int i = 0; i < e.Row.Cells.Count; i++) {
            e.Row.Cells[i].BackColor = System.Drawing.Color.Beige; ;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

所以这样的事情......没有经过测试,所以你可能需要稍微调整一下:

 protected void NamesGV_RowDataBound(object sender, GridViewRowEventArgs e) 
 {
    if (e.Row.RowType == DataControlRowType.Header) 
    {
        for (int i = 0; i < e.Row.Cells.Count; i++) 
        {
            e.Row.Cells[i].BackColor = System.Drawing.Color.Beige;
        }
    }

    if (e.Row.RowType == DataControlRowType.DataRow)
    {
         //Get reference to the button you want to hide/show
         LinkButton delButton = CType(e.Row.Cells(2).FindControl("lbYourLinkButtonId"), LinkButton);

         //check your data for value
         bool visible = (bool)DoACheckForAValue(NamesGV.DataKeys(e.Row.RowIndex).Value);
         delButton.Visible = visible;
    }
}