Mostrar Json en un Gridview dentro de otro Gridview.
Tengo un Json, como la imagen debajo:
Quiero mostrar “majors” en un gridview dentro de un gridview
XAML:
<GridView x:Name="asesmenGridView">
<GridView.ItemTemplate>
<DataTemplate>
<Grid x:Name="asesmenGrid">
<TextBlock
x:Name="judulT"
Text="{Binding Title}"/>
<GridView
x:Name="majorGridView"
ItemsSource="{Binding DataContext.majordatasource, ElementName=asesmenGridView}">
<GridView.ItemTemplate>
<DataTemplate x:DataType="local:MajorClass">
<Grid>
<TextBlock
x:Name="kelasT"
Text="{x:Bind Major}" />
</Grid>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
Código:
public MainPage()
{
this.InitializeComponent();
this.DataContext = this;
}
public List<MajorClass> majordatasource { get; set; } = new List<MajorClass>();
string urlPath = "https://…/choose-exam/2";
var httpClient = new HttpClient(new HttpClientHandler());
httpClient.DefaultRequestHeaders.Add("Authorization",
string.Format("Bearer {0}", tkn));
var response = await httpClient.GetAsync(urlPath);
string jsonText = await response.Content.ReadAsStringAsync();
try
{
JsonArray jsonArray = JsonArray.Parse(jsonText);
foreach (JsonValue groupValue in jsonArray)
{
string title = groupObject["title"].GetString();
JsonArray majorArray = groupObject["majors"].GetArray();
MajorClass majorC = new MajorClass();
foreach (JsonValue majorValue in majorArray)
{
JsonObject majorObject = majorValue.GetObject();
double majorID = majorObject["major_id"].GetNumber();
string major = majorObject["major"].GetString();
majorC.MajorID = (int)majorID;
majorC.Major = major + ",";
majordatasource.Add(majorC);
}
Ujian ujian = new Ujian();
ujian.Title = title;
ujiandatasource.Add(ujian);
}
asesmenGridView.ItemsSource = ujiandatasource;
Clase Ujian:
public class Ujian
{
public string Title { get; set; }
public ObservableCollection<MajorClass> majordatasource { get; set; }
public Ujian()
{
Title = string.Empty;
majordatasource = new ObservableCollection<MajorClass>();
}
public Ujian(string title)
{
Title = title;
}
}
public class MajorClass
{
public int MajorID { get; set; }
public string Major { get; set; }
}
}
Desde el código anterior, no logré mostrarlo en el gridview en un gridview (los datos que se recuperan son solo los últimos datos y se muestran repetitivamente, como se muestra a continuación).
¿Cómo manejarlo?
davy.ai
Solución para mostrar las “carreras” en un Gridview dentro de otro Gridview
Para mostrar las “carreras” en un Gridview dentro de otro Gridview, necesitamos actualizar el código de la siguiente manera:
Explicación:
ObservableCollection<majorclass>
para cada examen en los datos JSON. Esto nos permite mostrar las “carreras” para cada examen por separado en el Gridview dentro del Gridview.Ujian
y establecemos su propiedadTitle
.majordatasource
para cada examen analizando la matriz “majors” en los datos JSON y agregando cada objetoMajorClass
a la colección.majordatasource
del objetoUjian
en la nuevaObservableCollection<majorclass>
que creamos y agregando el objetoUjian
a la colecciónujiandatasource
. Esta colección contiene todos los exámenes con sus “carreras” asociadas.ItemsSource
del Gridview exterior en la colecciónujiandatasource
, que mostrará todos los exámenes en el Gridview exterior.ItemsSource
del Gridview interior para enlazar con la propiedadmajordatasource
del objetoUjian
, que mostrará las “carreras” de cada examen en el Gridview interior.Con estos cambios, las “carreras” deberían mostrarse correctamente en el Gridview dentro del Gridview, como se muestra a continuación:
</majorclass></majorclass></majorclass></majorclass>”>Comments are closed.