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

ASP .NET RowDataBound attribute working for only one row (first one)

我想在 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 是否有问题。 提前致谢!

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

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

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

<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");
        }
    }
}