【问题标题】:Disable gridview rows based on database table column value根据数据库表列值禁用gridview行
【发布时间】:2013-10-16 04:42:12
【问题描述】:

我有一个从数据库表加载的gridview。 表中有一个名为“有效”的列,其值为“Y”或“N”。 现在,我要做的是,检查“有效”的值是否为 Y,然后在加载 gridview 时该行中的整个记录​​应该显示为禁用。

如何进行呢?我应该为此编写一个程序还是可以从后面的代码中完成?

注意:列 Valid 不是 gridview 的一部分。

【问题讨论】:

  • 为什么 Valid 不是 gridview 的一部分?
  • 有效列不需要显示在网格视图中。有效列已放入数据库表中,仅用于网格视图中的禁用/启用行
  • 您可以在隐藏字段中添加它并进入 RowDataBound 事件,如 shekhar 答案所示。

标签: c# asp.net sql gridview


【解决方案1】:

您需要使用 gridview 的RowDataBound 事件来禁用行。
请注意,如果您使用databound columns,那么它会在tr 和td 中呈现,那么您需要找到该单元格,然后设置禁用属性。

protected void gvEntity_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
       //CheckBox cbAttachClrReq = (CheckBox) e.Row.FindControl("chkAdd");
       //check the value here and set enable property
       e.Row.Enabled = false;

    }

}

正如@Hanlet Escaño 所建议的,您可以在同一列中添加字段值,如下所示

<asp:TemplateField>
   <ItemTemplate>
      <<asp:Label ID="lbl1" runat="server" 
             Value='<%# Eval("Name") %>' />
      <asp:HiddenField ID="HiddenField1" runat="server" 
             Value='<%# Eval("valid") %>' />
</ItemTemplate>

并获取row-databound事件中的隐藏字段值如下

protected void gvEntity_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
       HiddenField Hf = (HiddenField) e.Row.FindControl("HiddenField1");
       if(Hf.Value=="Y")
           e.Row.Enabled = false;

    }

}

【讨论】:

  • +1,但我认为 OP 提到该字段不是 GridView 的一部分。所以也许如果那个 chkAdd 是一个隐藏字段而不是这可以工作。
  • 是的,这是个好主意,或者他可以使用 linq 根据身份列从他的源中过滤数据。
  • 感谢您的快速回复,我正在尝试按照您的建议实施。很快就会恢复。
  • 我收到此错误:“值”不是“标签”上的有效属性
  • 好的,我用文本代替值
【解决方案2】:

试试下面的。

此示例获取每条记录的 DataRowView,然后从基础数据源中提取 valid 列以进行测试。

 protected void grdDetails_RowDataBound(object sender, GridViewRowEventArgs e)
 {
       if (e.Row.RowType == DataControlRowType.DataRow)
       {
           var dr = e.Row.DataItem as DataRowView; 

              if(Convert.ToString(dr["valid"]) == 'Y')
                  e.Row.Enabled = false;

       }
  }

和标记

<asp:GridView ID="grdDetails" runat="server" OnRowDataBound="grdDetails_RowDataBound"

【讨论】:

  • 我最初误解了。这个答案应该可以解决您的问题。
猜你喜欢
  • 2021-05-19
  • 1970-01-01
  • 1970-01-01
  • 2015-08-04
  • 1970-01-01
  • 2013-06-28
  • 1970-01-01
  • 2019-10-02
  • 1970-01-01
相关资源
最近更新 更多