Nilesh Barai
Nilesh Barai

Reputation: 1322

Get DataGrid row by index

I am trying to obtain DataGridRow from my DataGrid based on index. I am using following code:

public DataGridRow GetGridRow(int index)
{
    DataGridRow row = (DataGridRow)DG_Statement.ItemContainerGenerator.ContainerFromIndex(index);
    if (row == null)
    {
        // May be virtualized, bring into view and try again.
        DG_Statement.UpdateLayout();
        DG_Statement.ScrollIntoView(DG_Statement.Items[index]);
        row = (DataGridRow)DG_Statement.ItemContainerGenerator.ContainerFromIndex(index);
    }
    return row;
}

Ref Link - Get row in datagrid

But unfortunately its returning a null object of DataGridRow. If I check the Items[] property of my grid I could see 13 items.

Need suggestion on how to obtain the Grid Row as I want to change color of top 2 and bottom 2 rows of my data grid.

Any help is appreciated. Thanks!!

Adding Screenshot of DataGrid Items

enter image description here

Important Update

If I call GetGridRow() from the SelectedIndexChanged Event of the Grid it works flawlessly.

On the other hand, if I call it after I construct the object of the page on which my grid is displayed it returns row object as NULL.

Upvotes: 10

Views: 24918

Answers (2)

Mike Schwartz
Mike Schwartz

Reputation: 2212

So if its in the code behind. You can just get the selected index of the DataGrid. I've named the datagrid dataGrid as an example.

var rowIndex = dataGrid.SelectedIndex;

var row = (DataGridRow)dataGrid.ItemContainerGenerator.ContainerFromIndex(selectedIndex);

Upvotes: 11

Leeland Clay
Leeland Clay

Reputation: 132

Check to make sure the index you're passing in is actually within bounds.

Upvotes: 0

Related Questions