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