This is a migrated thread and some comments may be shown as answers.

Dynamically created Button Event does not fire

3 Answers 159 Views
Grid
This is a migrated thread and some comments may be shown as answers.
_je_
Top achievements
Rank 1
_je_ asked on 12 Mar 2014, 07:36 PM
Hi to all
Good Day

I have created a grid in the usercontrol.
Grid uses NestedViewTemplate, also, on the Placeholder on Line 41, i am creating a dynamic button options but it seems that the created button event is not firing.

Please help me out on this. Thanks.

01.<telerik:RadGrid EnableViewState="true" AllowPaging="true" runat="server" AutoGenerateColumns="false" ID="rgNotification" Skin="Metro" CssClass="rgRadGridPanelBar" ShowHeader="false" OnNeedDataSource="rgNotification_NeedDataSource" OnItemDataBound="rgNotification_ItemDataBound" OnItemCommand="rgNotification_ItemCommand">
02.                    <MasterTableView PageSize="10" Name="Master" HierarchyLoadMode="ServerBind" DataKeyNames="ClientID" AllowPaging="true">
03.                        <PagerStyle Mode="NextPrevAndNumeric" />
04.                        <Columns>
05.                            <telerik:GridTemplateColumn>
06.                                <ItemTemplate>
07.                                    <div style="border: 1px solid #E5E5E5; padding: 10px; background-color: #F3F3F3; margin: 0;">
08.                                        <div class="row">
09.                                            <div class="col-md-6">
10.                                                <div class="tagCss_grid" style="background-color: #1C3278; margin-right: 5px">
11.                                                    <asp:Label runat="server" ID="lblCount" Text='<%# Bind("Count") %>'></asp:Label>
12.                                                </div>
13.                                                <asp:Label runat="server" ID="lblClient" Text='<%# Bind("ClientName") %>' Style="text-transform: uppercase;"></asp:Label> 
14.                                            </div>
15.                                            <div class="col-md-6 text-right">
16.                                                <asp:PlaceHolder ID="plHolder" runat="server"></asp:PlaceHolder>
17.                                            </div>
18.                                        </div>
19.                                    </div>
20.                                </ItemTemplate>
21.                            </telerik:GridTemplateColumn>
22.                        </Columns>
23.                        <NestedViewTemplate>
24.                            <div style="margin: 10px">
25.                                <telerik:RadGrid CssClass="rgRadGridPanelBarDetail" OnItemDataBound="rgDetails_ItemDataBound" OnItemCommand="rgDetails_ItemCommand" AutoGenerateColumns="false" runat="server" OnNeedDataSource="rgDetails_NeedDataSource" ID="rgDetails" ShowHeader="false">
26.                                    <MasterTableView Name="Details" DataKeyNames="ColorHex,AlertType,AlertTriggerId,ProjectId">
27.                                        <Columns>
28.                                            <telerik:GridTemplateColumn ItemStyle-Width="75%">
29.                                                <ItemTemplate>
30.                                                    <asp:PlaceHolder ID="plHolderDetail" runat="server"></asp:PlaceHolder>
31.                                                    <%# Eval("Message") %>
32.                                                </ItemTemplate>
33.                                            </telerik:GridTemplateColumn>
34.                                            <telerik:GridTemplateColumn ItemStyle-Width="25%" ItemStyle-HorizontalAlign="Right">
35.                                                <ItemTemplate>
36.                                                    <div class="btn-group">
37.                                                        <button type="button" class="btn btn-default btn-sm dropdown-toggle" data-toggle="dropdown">
38.                                                            Select Action <span class="caret"></span>
39.                                                        </button>
40.                                                        <ul class="dropdown-menu pull-right" role="menu">
41.                                                            <asp:PlaceHolder runat="server" ID="plMenu"></asp:PlaceHolder>
42.                                                        </ul>
43.                                                    </div>
44.                                                </ItemTemplate>
45.                                            </telerik:GridTemplateColumn>
46.                                        </Columns>
47.                                    </MasterTableView>
48.                                    <ClientSettings EnablePostBackOnRowClick="false">
49.                                        <ClientEvents OnRowClick="RowSelecting" />
50.                                    </ClientSettings>
51.                                </telerik:RadGrid>
52.                            </div>
53.                        </NestedViewTemplate>
54.                    </MasterTableView>
55.                    <ClientSettings AllowKeyboardNavigation="true" EnablePostBackOnRowClick="true">
56.                        <Selecting AllowRowSelect="true" />
57.                    </ClientSettings>
58.                </telerik:RadGrid>

3 Answers, 1 is accepted

Sort by
0
Princy
Top achievements
Rank 2
answered on 13 Mar 2014, 09:28 AM
Hi,

I'm not sure where you are adding the button in the NestedViewTemplate, you can use the ItemCreated event of the inner grid to create the button and attach its click event there.

C#:
protected void rgDetails_ItemCreated(object sender, GridItemEventArgs e)
{
 if (e.Item is GridDataItem)
 {
   GridDataItem items = e.Item as GridDataItem;
   PlaceHolder plc = (PlaceHolder)items.FindControl("plMenu");
   Button btn = new Button();
   btn.ID = "Button1";
   btn.Text = "Click";
   btn.Click += new EventHandler(btn_Click);
   plc.Controls.Add(btn);
 }          
}

Thanks,
Princy

0
_je_
Top achievements
Rank 1
answered on 18 Mar 2014, 01:47 AM
Thanks for your reply,

i already tried your suggestion prior to this query. but nothing happens.
0
Princy
Top achievements
Rank 2
answered on 18 Mar 2014, 12:07 PM
Hi,

I'm not able to replicate such an issue at my end. Please take a look at the sample code snippet. Provide your code behind if this doesn't help to replicate the issue.

ASPX:
<telerik:RadGrid ID="rgNotification" runat="server" AutoGenerateColumns="false" AllowPaging="true" AllowSorting="true" Width="50%" OnNeedDataSource="rgNotification_NeedDataSource" OnItemCommand="rgNotification_ItemCommand" OnItemCreated="rgNotification_ItemCreated">
    <MasterTableView Name="Master" HierarchyLoadMode="ServerBind" DataKeyNames="CustomerID">
        <Columns>
            <telerik:GridTemplateColumn DataField="ContactTitle" HeaderText="ContactTitle" SortExpression="ContactTitle">
                <ItemTemplate>
                    <asp:Label runat="server" ID="lblTitle" Text='<%# Bind("ContactTitle") %>'></asp:Label>
                </ItemTemplate>
            </telerik:GridTemplateColumn>
        </Columns>
        <NestedViewTemplate>
            <telerik:RadGrid ID="rgDetails" runat="server" OnNeedDataSource="rgDetails_NeedDataSource" AutoGenerateColumns="false" OnItemCreated="rgDetails_ItemCreated">
                <MasterTableView Name="Details" DataKeyNames="OrderID">
                    <Columns>
                        <telerik:GridTemplateColumn DataField="ShipCity" HeaderText="ShipCity" SortExpression="ShipCity">
                            <ItemTemplate>
                                <asp:Label runat="server" ID="lblCity" Text='<%# Bind("ShipCity") %>'></asp:Label>
                                <br />
                                <asp:PlaceHolder ID="PlaceHolderOfDetails" runat="server"></asp:PlaceHolder>
                            </ItemTemplate>
                        </telerik:GridTemplateColumn>
                    </Columns>
                </MasterTableView>
            </telerik:RadGrid>
        </NestedViewTemplate>
    </MasterTableView>
    <ClientSettings AllowKeyboardNavigation="true" EnablePostBackOnRowClick="true">
        <Selecting AllowRowSelect="true" />
    </ClientSettings>
</telerik:RadGrid>

C#:
protected void rgNotification_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
    rgNotification.DataSource = GetDataTable("SELECT CustomerID,  ContactTitle FROM Customers");
}
protected void rgDetails_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
    GridDataItem parentItem = ((sender as RadGrid).NamingContainer as GridNestedViewItem).ParentItem as GridDataItem;
    (sender as RadGrid).DataSource = GetDataTable("SELECT OrderID, ShipCity FROM Orders where CustomerID='" + parentItem.GetDataKeyValue("CustomerID").ToString() + "' ");
}
 
protected void rgNotification_ItemCommand(object sender, GridCommandEventArgs e)
{
    if (e.CommandName == RadGrid.ExpandCollapseCommandName && !e.Item.Expanded)
    {
        GridDataItem parentItem = e.Item as GridDataItem;
        RadGrid rg = parentItem.ChildItem.FindControl("rgDetails") as RadGrid;
        rg.Rebind();
    }
}
 
protected void rgDetails_ItemCreated(object sender, GridItemEventArgs e)
{
    if (e.Item is GridDataItem)
    {
        GridDataItem items = e.Item as GridDataItem;
        PlaceHolder plc = (PlaceHolder)items.FindControl("PlaceHolderOfDetails");
        Button btn = new Button();
        btn.ID = "Button1";
        btn.Text = "Click";
        btn.Click += new EventHandler(btn_Click);
        plc.Controls.Add(btn);
    }
}
public DataTable GetDataTable(string query)
{
    String ConnString = ConfigurationManager.ConnectionStrings["Northwind_newConnectionString3"].ConnectionString;
    SqlConnection conn = new SqlConnection(ConnString);
    SqlDataAdapter adapter = new SqlDataAdapter();
    adapter.SelectCommand = new SqlCommand(query, conn);
 
    DataTable myDataTable = new DataTable();
 
    conn.Open();
    try
    {
        adapter.Fill(myDataTable);
    }
    finally
    {
        conn.Close();
    }
 
    return myDataTable;
}

Thanks,
Princy
Tags
Grid
Asked by
_je_
Top achievements
Rank 1
Answers by
Princy
Top achievements
Rank 2
_je_
Top achievements
Rank 1
Share this question
or