Register javascript method with arguments using RegisterStartupScript for the Gridview controls

180 Views Asked by At

I have a grid view control inside the user control (ascx). This grid view's controls have to be registered with java script events. My question is, how do I register these Javascript events using RegisterStartupScript! As a workaround I have currently placed the Javascript method in the calling page (aspx). The code goes as shown below,

ascx:

<asp:GridView ID="gvCreateClaim" runat="server" AutoGenerateColumns="false"
    ShowFooter="true" OnRowDeleting="gvCreateClaim_RowDeleting" OnRowDataBound="gvCreateClaim_RowDataBound" Width="100%" OnPreRender="gvCreateClaim_PreRender">
    <Columns>
        <asp:BoundField HeaderText="S. No" DataField="SNo" ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="10%" />
        <asp:TemplateField HeaderText="Serial #" ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="25%">
            <ItemTemplate>
                <asp:TextBox ID="txtSerialNumber" runat="server" Text='<%#Eval("SerialNumber") %>' Width="200px"></asp:TextBox>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Damage Details" ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="60%">
            <ItemTemplate>
                <asp:TextBox ID="txtDamageDetails" runat="server" Text='<%#Eval("DamageDetails") %>' Width="600px"></asp:TextBox>
                <asp:Panel ID="pnlDamageDetails" Style="display: none;" runat="server" BorderColor="#336699">
                    <div>
                        <asp:RadioButtonList ID="rblDamageDetails" runat="Server" RepeatColumns="3" BorderColor="#336699" BorderStyle="Solid"
                            BorderWidth="1" BackColor="#dadada" RepeatDirection="Horizontal" Width="120">
                            <asp:ListItem Text="1" Value="1" />
                            <asp:ListItem Text="2" Value="2" />
                            <asp:ListItem Text="3" Value="3" />
                            <asp:ListItem Text="4" Value="4" />
                            <asp:ListItem Text="5" Value="5" />
                            <asp:ListItem Text="6" Value="6" />
                            <asp:ListItem Text="7" Value="7" />
                            <asp:ListItem Text="8" Value="8" />
                            <asp:ListItem Text="9" Value="9" />
                        </asp:RadioButtonList>
                    </div>
                </asp:Panel>
                <ajaxctltk:PopupControlExtender ID="PopupControlExtender1" PopupControlID="pnlDamageDetails" TargetControlID="txtDamageDetails" CommitProperty="value"
                    Position="Bottom" runat="server">
                </ajaxctltk:PopupControlExtender>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Delete" ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="5%">
            <ItemTemplate>
                <asp:LinkButton ID="lnkDelete" runat="server" Text="Delete" CommandName="Delete"></asp:LinkButton>
            </ItemTemplate>
            <FooterStyle HorizontalAlign="Right" />
            <FooterTemplate>
                <div class="padding2">
                    <asp:Button ID="btnAddNew" runat="server" Text="Add New Row"
                        OnClick="btnAddNew_Click" />
                </div>
            </FooterTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

ascx.cs

        protected void gvCreateClaim_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType != DataControlRowType.DataRow)
            return;
        LinkButton linkButton = (LinkButton)e.Row.Cells[3].Controls[1];

        TextBox txtDamageDetails = (TextBox)e.Row.Cells[2].Controls[1];

        Panel pnlDamageDetails = (Panel)e.Row.Cells[2].FindControl("pnlDamageDetails");
        RadioButtonList rblDamageDetails = (RadioButtonList)pnlDamageDetails.FindControl("rblDamageDetails");
        for (int i = 0; i < rblDamageDetails.Items.Count; i++)
            rblDamageDetails.Items[i].Attributes.Add("onclick", "setTextValue('" + txtDamageDetails.ClientID + "','" + rblDamageDetails.Items[i].Text + "','" + pnlDamageDetails.ClientID + "');");

        txtDamageDetails.Attributes.Add("onkeypress", "return false;");

        if (ClaimsData.Count == 1)
            linkButton.OnClientClick = "alert('At least one line item is needed in order to continue with Claim process');return false;";
        else
            linkButton.OnClientClick = "return confirm('Are you sure, you want to delete the S.No # " + e.Row.Cells[0].Text + "?');";
        //This below line is not working
        ScriptManager.RegisterStartupScript(this, this.GetType(), "setTextValue(textBoxID, text, panelID)", "$get(textBoxID).value = text;$get(panelID).style.display = 'None';", true);
    }

aspx:

<script>
function setTextValue(textBoxID, text, panelID) {
        $get(textBoxID).value = text;
        $get(panelID).style.display = "None";
    }
</script>

I don't want to write the Javascript method, setTextValue inside the aspx. rather it would work from ascx's RegisterStartupScript.

0

There are 0 best solutions below