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

Setting row.Selected doesn't fire SelectedIndexChanged

2 Answers 201 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Mark
Top achievements
Rank 1
Mark asked on 19 Jul 2011, 11:24 AM
Hi,

I am loading a grid with data and attaching to the SelectedIndexChanged event. When the grid is loaded I want to select the first row and have the code in the SelectedIndexChanged handler run. The only way I can manage this is to explicitly call the handler.

My C# code is as follows:

protected void grdTicket_NeedDataSource(object source, GridNeedDataSourceEventArgs e)
{
    DataSet ds = new DataSet();
    DataTable dt = new DataTable();
    dt.Columns.Add("UserId");
 
    for (int i = 0; i < 15; i++)
    {
        DataRow dr = dt.NewRow();
        dr["UserId"] = "XYZ" + i.ToString();
        dt.Rows.Add(dr);
    }
 
    ds.Tables.Add(dt);
    grdTicket.DataSource = ds;
}
 
protected void grdTicket_PreRender(object sender, EventArgs e)
{
    RadGrid grid = sender as RadGrid;
 
    if (grid.MasterTableView.Items.Count > 0)
    {
        if (grid.SelectedIndexes.Count == 0)
        {
            //grid.SelectedIndexes.Add(0);
            grid.MasterTableView.Items[0].Selected = true;
 
            // This just feels dirty!!
            // Why doesn't the event fire when I set the row's Selected property
            grdTicket_SelectedIndexChanged(sender, null);
        }
    }
}
 
protected void grdTicket_SelectedIndexChanged(object sender, EventArgs e)
{
    RadGrid grid = sender as RadGrid;
    int index = Convert.ToInt32(grid.SelectedIndexes[0]);
    lblSelectedIndex.Text = "Selected index = " + index;
}

and my HTML is:

<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<telerik:RadGrid ID="grdTicket" runat="server" AutoGenerateColumns="false" Width="946px"
    Font-Names="Verdana" Font-Size="x-small" EnableViewState="true" AllowSorting="true"
    AllowPaging="true" AllowMultiRowSelection="false" OnNeedDataSource="grdTicket_NeedDataSource"
    OnPreRender="grdTicket_PreRender" OnSelectedIndexChanged="grdTicket_SelectedIndexChanged">
    <ClientSettings EnablePostBackOnRowClick="True">
        <Selecting AllowRowSelect="True" />
    </ClientSettings>
    <MasterTableView Width="100%" NoDetailRecordsText="No Records To Display">
        <CommandItemSettings ExportToPdfText="Export to PDF"></CommandItemSettings>
        <RowIndicatorColumn FilterControlAltText="Filter RowIndicator column">
        </RowIndicatorColumn>
        <ExpandCollapseColumn FilterControlAltText="Filter ExpandColumn column">
        </ExpandCollapseColumn>
        <Columns>
            <telerik:GridBoundColumn HeaderText="User ID" DataField="UserId" UniqueName="UserID">
            </telerik:GridBoundColumn>
        </Columns>
        <EditFormSettings>
            <EditColumn FilterControlAltText="Filter EditCommandColumn column">
            </EditColumn>
        </EditFormSettings>
    </MasterTableView>
    <PagerStyle Mode="NextPrevNumericAndAdvanced" ShowPagerText="true" />
    <FilterMenu EnableImageSprites="False">
    </FilterMenu>
    <HeaderContextMenu CssClass="GridContextMenu GridContextMenu_Default">
    </HeaderContextMenu>
</telerik:RadGrid>
<br />
<asp:Label runat="server" ID="lblSelectedIndex" />

Can anyone tell me what I need to change to get this to work without the need to call the handler directly?

Thanks,

David

2 Answers, 1 is accepted

Sort by
0
Martin
Telerik team
answered on 22 Jul 2011, 07:15 AM
Hello Mark,

You have to fire the "Select" command in order to make SelectedIndexChanged event handler to be called:

protected void grdTicket_PreRender(object sender, EventArgs e)
{
    RadGrid grid = sender as RadGrid;
 
    if (grid.MasterTableView.Items.Count > 0)
    {
        if (grid.SelectedIndexes.Count == 0)
        {
            (grid.MasterTableView.Items[0] as GridDataItem).FireCommandEvent("Select", String.Empty);
            //grid.SelectedIndexes.Add(0);
            //grid.MasterTableView.Items[0].Selected = true;
 
            // This just feels dirty!!
            // Why doesn't the event fire when I set the row's Selected property
            //grdTicket_SelectedIndexChanged(sender, null);
        }
    }
}

More information about how to fire commands from code is available at:

How to fire command events from code

I hope this helps.

All the best,
Martin
the Telerik team

Register for the Q2 2011 What's New Webinar Week. Mark your calendar for the week starting July 18th and book your seat for a walk through of all the exciting stuff we will ship with the new release!

0
Mark
Top achievements
Rank 1
answered on 29 Jul 2011, 10:40 AM
Thanks very much Martin, that did the job.
Tags
Grid
Asked by
Mark
Top achievements
Rank 1
Answers by
Martin
Telerik team
Mark
Top achievements
Rank 1
Share this question
or