【问题标题】:Set an Elements Visibility Based on Cell Value of Bound Datatable根据绑定数据表的单元格值设置元素可见性
【发布时间】:2015-07-18 13:21:59
【问题描述】:

我正在尝试根据绑定 DataTable 中的关联列找出 GridView 中的单元格 可见 的方法。我认为我遇到的问题是该表是动态的,并且可能随着将行添加到表中,该表没有在 asp 页面上重新填充/重新刷新。

这是场景: 例如,我有一个三列一行的表格。第 1 列是索引,第 2 列是名称,第 3 列是 true 或 false,用于设置链接在 asp 页面中的可见性。

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

1 |约翰·多伊

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

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

但是因为第 3 列是正确的,所以我希望看到一个“删除”按钮,以便 asp 页面看起来像这样

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

其中“删除”是用于删除新插入的行的链接。

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

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

编辑

添加 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; ;
        }
    }
}

【问题讨论】:

  • 有代码要分享吗?您可能希望在 GridView.RowDataBound 事件处理程序中评估您的第三个数据值并在那时插入您的 LinkBut​​ton。或者,您可以包含 LinkBut​​ton 并将其默认为隐藏,然后在 RowDataBound 中更改控件的可见性。
  • 我可以分享很多代码,只是有点分散在整个应用程序中。代码的哪一部分可以帮助你,特别是@mjw?
  • 也许是 GridView 标记和前面提到的 RowDataBound 事件处理程序?这就是我将如何解决您所描述的问题,但也许您正在以一种不符合该方法的方式做某事。
  • 我已经在你的替代路径上,我默认包含链接按钮并将其设置为隐藏。所以我需要更改 RowDataBound 事件中的可见性。我将编辑我的原件,以包括到目前为止我在该功能中所拥有的功能,但它并不多,@mjw。
  • 这与您想要做的类似:stackoverflow.com/questions/23680973/… 虽然您将更改可见性而不是禁用它。

标签: c# asp.net gridview hyperlink datatable


【解决方案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;
    }
}

【讨论】:

  • 它确实需要调整,但我让它工作了。我希望下一个挑战,将这个现在可见的删除按钮链接到一个实际删除相应行的函数,不会很困难。
  • 很高兴你能成功!将其链接到命令应该不会太糟糕。考虑使您的 LinkBut​​ton 列成为 TemplateColumn 并使用 CommandName 和 CommandArgument 传递您的操作和要删除的项目 ID。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-03
相关资源
最近更新 更多