Boas precisava de ajuda a carregar um ficheiro XML numa datatable que por sua vez encontra-se dentro de um dataset.
o cenário é o seguinte:
Tenho este datatable criado num dataset
Estou a tentar ler/carregar o xml nesta datatable e não estou a conseguir, bem como visualizar.
O codigo que tenho é o seguinte:
Código:
DataSetleit dataleit = new DataSetleit();
dataleit.DataTable1.ReadXml(caminho);
dataTable1DataGrid.DataContext = dataleit.DataTable1.DefaultView;
Tenho estado a pesquisar mas não estou a conseguir chegar la.
Este codigo que coloquei funciona mas quando o dataset ou datagrid não é criado em modo visual
Eu consigo ler o xml e carregar num datagrid desta maneira, mas como disse não tenho nada criado em modo visual e precisava para poder fazer report's dinamicos.
Código:
DataSet objDataSet = new DataSet();
objDataSet.ReadXml(caminho);
dataGrid1.DataContext = objDataSet.Tables[0].DefaultView;
Podem-me dar umas luzes?
Cptos
Obrigado
Viva,
Se entendi bem o teu problema o exemplo que te envio em anexo deve te ajudar.
O que eu faço é carregar todo o conteúdo do XML para um DataSet, depois associo a um DataTable e para provar que os dados estão lá eu associo o DataTable a uma DataGridView.
Boas, certo mas eu isto consigo fazer.
A questão é que o dataset e o datatable que tu crias é em codigo e não em modo "visual" como eu mostro no print.
Exprimenta no projecto->Botão Direito->Add new item->Data->Dataset
Depois dentro do dataset criar um datatable como eu tenho ali.
Finalmente nos datasources isso aparece ja pronto para arrastar e ele automaticamente cria a gridview, a questão é carregar la o xml.
Isto em modo visual é necessario para criar depois um report e ele ler automaticamente o datset.
Não sei se me estou a fazer entender
PS: Dcp nao ter dito mas tou a usar WPF, em windows forms o dataset ate aparece na toolbox presumo eu
Viva,
Amanhã quando chegar à empresa eu crio-te então um exemplo. Podias enviar-me um XML exemplo para testes?!
Ora Viva mais uma vez,
Penso que o que desejas deve ser o que te envio em anexo com o nome "WpfApplication1.zip".
Para quem quiser também envio o mesmo projecto em WinForms.
Epa não me digas que é so este pedaço de codigo
Código:
public partial class MainWindow : Window
{
DataSet1.ItinerarioDataTable icdt = new DataSet1.ItinerarioDataTable();
public MainWindow()
{
InitializeComponent();
}
protected override void OnInitialized(EventArgs e)
{
base.OnInitialized(e);
icdt.ReadXml("teste.xml");
_dataGrid.ItemsSource = icdt.DefaultView;
}
}
}
Ja agora tira-me outra duvida, este método que utilizaste no caso de teres mais colunas no xml ele apenas vai ligar as que la estão certo?
Agora vê como eu tinha dado a volta a questão, tinha criado um dataset manualmente como mostraste no 1 exemplo e depois copiava para o outro
Código:
DataSet objDataSet = new DataSet();
objDataSet.ReadXml(filename);
DataRow dr1;
DataSetLeit dsLeit = new DataSetLeit();
foreach (DataRow dr in objDataSet.Tables[0].Rows)
{
dr1 = dsLeit.Itinerario.NewRow();
dr1["ORG_ID"] = dr["ORG_ID"];
dr1["ROUTE_ID"] = dr["ROUTE_ID"];
dr1["CYCLE_YEAR"] = dr["CYCLE_YEAR"];
dr1["CYCLE_NUMBER"] = dr["CYCLE_NUMBER"];
dr1["ITINERARIE_NUMBER"] = dr["ITINERARIE_NUMBER"];
dr1["ITINERARIE_STATE"] = dr["ITINERARIE_STATE"];
dr1["DATE_THEOR"] = dr["DATE_THEOR"];
dr1["DATE_READING"] = dr["DATE_READING"];
dsLeit.Itinerario.Rows.Add(dr1);
}
itinerarioDataGrid.DataContext = dsLeit.Itinerario.DefaultView;
Viva,
Se tiveres mais ou menos campos ele carrega só os que estão estipulados no DataTable.
O que fizeste é uma opção, mas o que eu fiz agora são duas ou três linhas de código. Demorei mais tempo porque tive de perceber como funcionava o WPF pois nunca programei nessa tecnologia.
Certo, mas o que fizeste são "best practices" a partida, porque o que eu fiz é uma solução de contorno que pode trazer mais problemas a posterior.
Obrigado pela ajuda
Cumprimentos
Porque não usar o xsd.exe para gerar a classe que representa o xsd que escreveste e dp xml serializer para ler o ficheiro xml?
Não é muito mais pratico?!