我已经将RowDataBound用于gridview。下面是我的C#代码
protected void gvParameterValue_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
Label lblLocID = (Label)e.Row.FindControl("lblLocationID");
if(condition)
{
TextBox txtBox = (TextBox)e.Row.FindControl("txtValue");
txtBox.Attributes.Add("onchange", "ValueOnChange();");
}
}
}
gridview的Asp.Net代码
<asp:UpdatePanel ID="updatePanel" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnSave" EventName="Click" />
</Triggers>
<ContentTemplate>
<asp:GridView ID="gvParameterValue" SkinID="GridView" runat="server" OnRowDataBound ="gvParameterValue_RowDataBound" AutoGenerateColumns="False">
<Columns>
<asp:TemplateField HeaderText="Location Name">
<asp:TemplateField HeaderText="Parameter Value">
<ItemTemplate>
<asp:TextBox ID="txtValue" SkinID="fineLineTextBox" TabIndex="1" runat="server" AutoPostBack="false"></asp:TextBox>
<%--<asp:TextBox ID="TextBox1" SkinID="fineLineTextBox" TabIndex="1" runat="server" OnTextChanged="textBox1_textChanged" AutoPostBack="true"></asp:TextBox>--%>
<asp:Label ID="lblPreDayVal" runat="server" Text='<%# Bind("PreviousValue") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</ContentTemplate >
</asp:UpdatePanel>
js功能如下,我有一个问题
function ValueOnChange()
{
var val = document.getElementById('lblPreDayValue').value;
}
它出错“Microsoft JScript runtime error: Object required
”
我已尝试过所有可能的网络解决方案,但没有任何作用...
答案 0 :(得分:2)
您已在ID getElementById
上致电lblPreDayValue
。在ASP.NET标记中,您将其称为lblPreDayVal
。
您可能还想使用ClientID来确保获得.NET生成的正确ID
答案 1 :(得分:2)
您可以在gvParameterValue_RowDataBound方法的绑定步骤中从服务器端传递ClientID,如下所示: -
TextBox txtBox = (TextBox)e.Row.FindControl("txtValue");
Label lblVal = (Label)e.Row.FindControl("lblPreDayVal");
txtBox.Attributes.Add("onchange", "ValueOnChange('" + lblVal.ClientID + "');");
然后在ValueOnChange方法定义中,将参数作为cid传递(比如说)。
function ValueOnChange(cid)
{
var val = document.getElementById(cid).innerHTML;
}
答案 2 :(得分:0)
尝试使用
function ValueOnChange()
{
var val = document.getElementById('#<%= lblPreDayVal.ClientID %>').innerHTML;
}
如果上述din工作那么
function ValueOnChange()
{
var val = document.getElementById('lblPreDayVal').innerHTML;
}
答案 3 :(得分:0)
尝试在values
RowBound
事件中传递gridview
,您尝试访问getElementbyId('lblLocID')
无法正常工作,因为在呈现行时它的ID将会更改。
if (e.Row.RowType == DataControlRowType.DataRow)
{
Label lblLocID = (Label)e.Row.FindControl("lblLocationID");
Label lblPreDayValue =(Label)e.Row.FindControl("lblPreDayValue");
if (lblLocID.Text.Equals("154") || lblLocID.Text.Equals("168") || lblLocID.Text.Equals("178"))
{
TextBox txtBox = (TextBox)e.Row.FindControl("txtValue");
txtBox.Attributes.Add("onchange", "ValueOnChange(" + lblPreDayValue.ClientID + ");");
}
}
将ClientID
传递给函数后
//或者你可以直接传递label的值并赋值。
function ValueOnChange(ClntID)
{
var val = document.getElementById('ClntID').innerHTML;
}