Row values with DataGrid SelectionChanged Event

1 Answer 654 Views
DataGrid
IvanDrago
Top achievements
Rank 1
IvanDrago asked on 08 Nov 2021, 03:44 PM

Hello, 

im new in Xamarin Forms. I tried to get the Row Values of a selected row in DataGrid. The Problem ist when i try this Knowledge Base Article it shows me null  in the selectedItem Breackpoint. Can someone help me to get this Values?

My MainPage.xaml.cs


using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Data.SqlClient;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Telerik.XamarinForms.DataGrid.Commands;
using Xamarin.Forms;


namespace LagerApp.Portable
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
            GetArticles();
        }
        

        private void buttonbearbeiten_Clicked(object sender, EventArgs e)
        {
            
        }

        private void buttonNew_Clicked(object sender, EventArgs e)
        {
            popupNew.IsOpen = true;
            ArtNumber.Focus();
            ArtNumber.Text = "";
            WerkNumber.Text = "";
            Description.Text = "";
        }

        private void buttonDelete_Clicked(object sender, EventArgs e)
        {

        }

        private async void GetArticles()
        {
            HttpClientHandler clientHandler = new HttpClientHandler();
            clientHandler.ServerCertificateCustomValidationCallback = delegate { return true; };

            HttpClient client = new HttpClient(clientHandler);
            
            var response = await client.GetStringAsync("https://lagerapp.api.leonhardlang.at/api/Lager/GetArticle");
            var articles = JsonConvert.DeserializeObject<List<Articles>>(response);
            var columns = from c in articles select new { c.Artikelnummer, c.Werk, c.Kommentar };
            DataGrid.ItemsSource = columns;
        }

        private async void btnSave_Clicked(object sender, EventArgs e)
        {
            Articles articles = new Articles()
            {
                Artikelnummer = ArtNumber.Text,
                Werk = WerkNumber.Text,
                Kommentar = Description.Text
            };



            var json = JsonConvert.SerializeObject(articles);
            var content = new StringContent(json, Encoding.UTF8, "application/json");
            HttpClientHandler clientHandler = new HttpClientHandler();
            clientHandler.ServerCertificateCustomValidationCallback = delegate { return true; };


            HttpClient client = new HttpClient(clientHandler);
            
            var result = await client.PostAsync("https://lagerapp.api.leonhardlang.at/api/Lager/CreateArticle", content);

            if (result.StatusCode == HttpStatusCode.OK)
            {
                await DisplayAlert("Information","Erfolgreich angelegt", "Ok");
            }

            GetArticles();
            popupNew.IsOpen = false;
        }
       

        private void btnCancel_Clicked(object sender, EventArgs e)
        {
            popupNew.IsOpen = false;
        }

        private void DataGrid_SelectionChanged(object sender, Telerik.XamarinForms.DataGrid.DataGridSelectionChangedEventArgs e)
        {

            if (e.AddedItems.Count() > 0)
            {
                var selectedItem = e.AddedItems as Articles;

                
                Application.Current.MainPage.DisplayAlert("Info", $"{selectedItem.id}, " +
                    $"{selectedItem.Artikelnummer}, {selectedItem.Werk}, {selectedItem.Kommentar}", "OK");
            }

        }
    }

}

My Class: 


using System;
using System.Collections.Generic;
using System.Text;

namespace LagerApp.Portable
{
   
    public class Articles
    {
        public int id { get; set; }
        public string Artikelnummer { get; set; }
        public string Werk { get; set; }
        public string Kommentar { get; set; }
    }
}

 

Thank you

 

 

 

1 Answer, 1 is accepted

Sort by
0
Accepted
Yana
Telerik team
answered on 10 Nov 2021, 01:00 PM

Hello Drago,

Inside the SelectionChanged event handler you can access the Selected item/items through the e.AddedItems collection.  The problem comes from the cast here:

var selectedItem = e.AddedItems as Articles;

e.AddedItems is a collection which holds a list of Articles objects, the cast is not correct, that's why selectedItem is null.  You would need to modify it like this:

var selectedItem = e.AddedItems.First() as Articles;

Please give it a try and let me know if you have any additional questions on this.

Regards,
Yana
Progress Telerik

Love the Telerik and Kendo UI products and believe more people should try them? Invite a fellow developer to become a Progress customer and each of you can get a $50 Amazon gift voucher.

IvanDrago
Top achievements
Rank 1
commented on 10 Nov 2021, 02:12 PM

Omg. 

 

Thank you very much. That was the hint.

 

Cheers

Tags
DataGrid
Asked by
IvanDrago
Top achievements
Rank 1
Answers by
Yana
Telerik team
Share this question
or