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.