IValueConverter gets wrong row

3 posts, 0 answers
  1. J
    J avatar
    11 posts
    Member since:
    Sep 2015

    Posted 14 Dec 2015 Link to this post


     I use IValueConverter to calculate a column value based on other two column values. The problem is that when I edit the cell value and press Enter I get the next gridview row in IValueConverter. Do you know what the problem is? I use the code below on a UserControl.


    this.clubsGrid.ItemsSource = EvolucionMercados.GetClubs();

    public static IEnumerable<Club> GetClubs()
                ObservableCollection<Club> clubs = new ObservableCollection<Club>();
                Club club;
                // Liverpool
                club = new Club("Liverpool", new DateTime(1892, 1, 1), 45362, 50.99f);
                club.Players.Add(new Player("Pepe Reina", 25, Position.GK, "Spain"));
                club.Players.Add(new Player("Jamie Carragher", 23, Position.DF, "England"));
                club.Players.Add(new Player("Steven Gerrard", 8, Position.MF, "England"));
                club.Players.Add(new Player("Fernando Torres", 9, Position.FW, "Spain"));
                // Manchester Utd.
                club = new Club("Manchester Utd.", new DateTime(1878, 1, 1), 76212, 60.49f);
                club.Players.Add(new Player("Edwin van der Sar", 1, Position.GK, "Netherlands"));
                club.Players.Add(new Player("Rio Ferdinand", 5, Position.DF, "England"));
                club.Players.Add(new Player("Ryan Giggs", 11, Position.MF, "Wales"));
                club.Players.Add(new Player("Wayne Rooney", 10, Position.FW, "England"));
                // Chelsea
                club = new Club("Chelsea", new DateTime(1905, 1, 1), 42055, 70.99f);
                club.Players.Add(new Player("Petr Čech", 1, Position.GK, "Czech Republic"));
                club.Players.Add(new Player("John Terry", 26, Position.DF, "England"));
                club.Players.Add(new Player("Frank Lampard", 8, Position.MF, "England"));
                club.Players.Add(new Player("Nicolas Anelka", 39, Position.FW, "France"));
                // Arsenal
                club = new Club("Arsenal", new DateTime(1886, 1, 1), 60355, 35.19f);
                club.Players.Add(new Player("Manuel Almunia", 1, Position.GK, "Spain"));
                club.Players.Add(new Player("Gaël Clichy", 22, Position.DF, "France"));
                club.Players.Add(new Player("Cesc Fàbregas", 4, Position.MF, "Spain"));
                club.Players.Add(new Player("Robin van Persie", 11, Position.FW, "Netherlands"));
                return clubs;

                        DataMemberBinding="{Binding Name}">
                        DataMemberBinding="{Binding Established}"
                        Header="Stadium Capacity"
                        DataMemberBinding="{Binding StadiumCapacity}"
                        Header="Ticket Price"
                        DataMemberBinding="{Binding TicketPrice}"
                        Header="Sellout Revenue"
                        DataMemberBinding="{Binding Path=., Converter={StaticResource clubToSelloutRevenueConverter}}"

  2. J
    J avatar
    11 posts
    Member since:
    Sep 2015

    Posted 14 Dec 2015 in reply to J Link to this post

    You can check the issue in the demo projecto that I have uploaded to dropbox:


    When you edit the column "Stadium Capacity" the field "Sellout Revenue" should be recalculated autommatically. I don't know what I'm doing wrong.

  3. DevCraft R3 2016 release webinar banner
  4. Stefan X1
    Stefan X1 avatar
    482 posts

    Posted 16 Dec 2015 Link to this post

    Hi Julio,

    I tried reproducing the issue you are experiencing at your end, but to no avail. The value passed to the Convert() method of the IValueConverter was the one of the currently edited item of RadGridView. You can take a look at the following video as a demonstration: link. Can you please check it out and let me know in case I am missing something?

    However, I am a little confused how would the value of the SelloutRevenue property would be updated based on the value of the StadiumCapacity one, as there is no logic implemented for updating it.
    public int StadiumCapacity
        get { return this.stadiumCapacity; }
            if (value != this.stadiumCapacity)
                this.stadiumCapacity = value;

    Stefan X1
    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Feedback Portal and vote to affect the priority of the items
Back to Top