ASP .NET RowDataBound 属性仅适用于一行(第一行)

Posted

技术标签:

【中文标题】ASP .NET RowDataBound 属性仅适用于一行(第一行)【英文标题】:ASP .NET RowDataBound attribute working for only one row (first one) 【发布时间】:2021-05-06 17:35:43 【问题描述】:

我想在 gridview 中闪烁选定的行。我正在使用 jquery 并将其绑定到 RowDataBound 方法下的 ID 属性。

但只有一行(第一行)在闪烁,即使有多行设置为闪烁。

这是 html 正文

    <body>
        <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager" runat="server" />
        <div>
            <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                <ContentTemplate>
                    <fieldset>
                        <div>
                            <asp:GridView  ID="GrdScreen1" runat="server" OnRowDataBound="GrdTaskDetail_RowDataBound" AutoGenerateColumns="false">
                                <Columns>
                                    <asp:TemplateField HeaderText="Shift">
                                        <ItemTemplate>
                                            <asp:Label ID="testblinklbl" runat="server" Text='<%# Eval("Shift") %>'></asp:Label>
                                        </ItemTemplate>
                                    </asp:TemplateField>
                                    <asp:TemplateField HeaderText="TaskName">
                                        <ItemTemplate>
                                            <asp:Label ID="testemplbl" runat="server" Text='<%# Eval("TaskName") %>'></asp:Label>
                                        </ItemTemplate>
                                    </asp:TemplateField>
                                    <asp:TemplateField HeaderText="IsBlinkON">
                                        <ItemTemplate>
                                            <asp:Label ID="testblklbl" runat="server" Text='<%# Eval("ToBlink") %>'></asp:Label>
                                            <asp:HiddenField ID="hddblink" runat="server" Value='<%#Eval("ToBlink")%>' />  
                                        </ItemTemplate>
                                    </asp:TemplateField>
                                </Columns>
                            </asp:GridView>
                        </div>
                    </fieldset>
                </ContentTemplate>
            </asp:UpdatePanel>
        </div>
        </form>
    </body>

这是脚本

<script type="text/javascript">
    $(function() 
        blinkeffect('#txtblnk');
      )
   
  function blinkeffect(selector) 
      $(selector).fadeOut('slow', function() 
          $(this).fadeIn('slow', function() 
            blinkeffect(this);
          );
        );
      
 </script>

这是我的 Rowdatabound 和页面加载代码 -

protected void Page_Load(object sender, EventArgs e)
    
        if (!Page.IsPostBack)
        
            DataTable dt = new DataTable();
            dt = Heatcon.GetAuxcabOpDashboardScreen1("Station 1");

            if (dt.Rows.Count > 0)
            
                GrdScreen1.DataSource = dt;
                GrdScreen1.DataBind();
            
        
    

    protected void GrdTaskDetail_RowDataBound(object sender, GridViewRowEventArgs e)
    

        if (e.Row.RowType == DataControlRowType.DataRow)
        
            HiddenField BlinkTask = (e.Row.FindControl("hddblink") as HiddenField);

            if (BlinkTask.Value.ToString() == "1")
            
                e.Row.Attributes.Add("id", "txtblnk");
            
        
    

这是有效的,但仅适用于一行(第一行)。我尝试调试以查看其他行的 blinkvalue 是否设置为“1”。

如果我遗漏了什么,请告诉我?不确定 asp gridview 或 jquery 是否有问题。 提前致谢!

如果需要,我可以提供更多详细信息。

【问题讨论】:

【参考方案1】:

您的代码不起作用,因为您对多个控件使用相同的“id”属性值。 “id”值对于页面中的每个控件都是唯一的。

为了完成这项工作,您必须使用“类”属性。尝试以下更改。

<script type="text/javascript">
    $(function() 
        blinkeffect('.clstxtblnk');
      )
   
  function blinkeffect(selector) 
      $(selector).fadeOut('slow', function() 
          $(this).fadeIn('slow', function() 
            blinkeffect(this);
          );
        );
      
</script>

更改 RowDataBound 方法以添加“class”属性而不是“id”属性。

protected void GrdTaskDetail_RowDataBound(object sender, GridViewRowEventArgs e)


    if (e.Row.RowType == DataControlRowType.DataRow)
    
        HiddenField BlinkTask = (e.Row.FindControl("hddblink") as HiddenField);

        if (BlinkTask.Value.ToString() == "1")
        
            e.Row.Attributes.Add("class", "clstxtblnk");
        
    

【讨论】:

工作就像一个魅力!我花了很多时间找出原因并寻找解决方法,从未检查过属性。感谢您的帮助!

以上是关于ASP .NET RowDataBound 属性仅适用于一行(第一行)的主要内容,如果未能解决你的问题,请参考以下文章

在信号器集线器类上设置 [Authorize] 属性仅在连接到集线器时有效,而不是在集线器上的每个方法之前(ASP.NET Core 2.2)

ASP.NET MVC 验证:导致 javascript 属性?

如何在下面的 onClick 方法中运行 RowDataBound 方法?

使用 asp.net 属性路由的根路径的默认路由

ASP.net 应用程序未在使用 WCF 服务的网格视图控件中显示总计

如何在c#中绑定gridview rowdatabound中的dropdownlist?