2

我已将 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();");
            }
        }
    }

网格视图的 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”我已经尝试了所有可能的网络解决方案,但没有任何效果......

4

4 回答 4

2

你已经打电话getElementById给 ID 了lblPreDayValue。在您的 ASP.NET 标记中,您将其称为lblPreDayVal.

您可能还想使用ClientID来确保获得由 .NET 生成的正确 ID

于 2013-09-10T07:14:07.470 回答
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;
     }
于 2013-09-10T10:15:02.867 回答
0

尝试使用

function ValueOnChange()
     {
         var val = document.getElementById('#<%= lblPreDayVal.ClientID %>').innerHTML;
     }

如果上述 din 工作,那么

function ValueOnChange()
     {
         var val = document.getElementById('lblPreDayVal').innerHTML;
     }
于 2013-09-10T08:41:02.260 回答
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给函数后 //或者你可以直接传递标签的值并赋值。

function ValueOnChange(ClntID)
     {

         var val = document.getElementById('ClntID').innerHTML;
     }
于 2013-09-10T10:25:39.010 回答