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 方法?