look to this link
Databindings are not working
I have made a small Project where I have a wcf service and an wpf app to look up weather data in between certain dates. At first, everything was fine, but when I used Databindings, the Datagrid stayed emty. Can someone help me?
//WCF interface:
public interface IService1
{
[OperationContract]
List<WeatherDataContract> GetWeatherData(DateTime start, DateTime end);
}
[DataContract]
public class WeatherDataContract
{
[DataMember]
public int Id { get; set; }
[DataMember]
public DateTime Datum { get; set; }
[DataMember]
public TimeSpan Zeit { get; set; }
[DataMember]
public double Temperatur { get; set; }
[DataMember]
public int Luftdruck { get; set; }
[DataMember]
public int Regen { get; set; }
[DataMember]
public double Wind { get; set; }
[DataMember]
public int Richtung { get; set; }
[DataMember]
public int Feuchtigkeit { get; set; }
}
//WCF service
WeatherDataEntities weatherDataEntities = new WeatherDataEntities();
public List<WeatherDataContract> GetWeatherData(DateTime start, DateTime end)
{
return (from weather in weatherDataEntities.WeatherDatas
where weather.Datum <= end && weather.Datum >= start
select new WeatherDataContract
{
Id = weather.Id,
Datum = (DateTime)weather.Datum,
Zeit = (TimeSpan)weather.Zeit,
Temperatur = (double)weather.Temperatur,
Luftdruck = (int)weather.Luftdruck,
Regen = (int)weather.Regen,
Wind = (int)weather.Wind,
Richtung = (int)weather.Richtung,
Feuchtigkeit = (int)weather.Feuchtigkeit
}).Take(100).ToList();
}
//XAML:
<DataGrid x:Name="weatherDataGrid" HorizontalAlignment="Left" Height="355" Margin="21,35,0,0" VerticalAlignment="Top" Width="742" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Id}"/>
<DataGridTextColumn Binding="{Binding Datum}"/>
<DataGridTextColumn Binding="{Binding Zeit}"/>
<DataGridTextColumn Binding="{Binding Temperatur}"/>
<DataGridTextColumn Binding="{Binding Luftdruck}"/>
<DataGridTextColumn Binding="{Binding Regen}"/>
<DataGridTextColumn Binding="{Binding Wind}"/>
<DataGridTextColumn Binding="{Binding Richtung}"/>
<DataGridTextColumn Binding="{Binding Feuchtigkeit}"/>
</DataGrid.Columns>
</DataGrid>
<DatePicker SelectedDateChanged="Date_SelectedDateChanged" x:Name="fromDate" HorizontalAlignment="Left" Margin="75,10,0,0" VerticalAlignment="Top" Width="150"/>
<DatePicker SelectedDateChanged="Date_SelectedDateChanged" x:Name="toDate" HorizontalAlignment="Left" Margin="287,9,0,0" VerticalAlignment="Top" Width="136"/>
<Label Content="From" HorizontalAlignment="Left" Margin="33,8,0,0" VerticalAlignment="Top"/>
<Label Content="To" HorizontalAlignment="Left" Margin="260,10,0,0" VerticalAlignment="Top"/>
//xaml.cs
ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();
public List<ServiceReference1.WeatherDataContract> WeatherData
{
get
{
return client.GetWeatherData(fromDate.SelectedDate ?? DateTime.MinValue, toDate.SelectedDate ?? DateTime.MaxValue).ToList();
}
}
public MainWindow()
{
InitializeComponent();
}
private void Date_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
{
weatherDataGrid.ItemsSource = WeatherData;
}
}
12 answers
Sort by: Most helpful
-
-
Simon Aigner 1 Reputation point
2022-06-23T06:04:07.633+00:00 toolbox --> choose items
private void button1_Click(object sender, EventArgs e)
{
// Create object of Open file dialog class
{
OpenFileDialog dlg = new OpenFileDialog();
// set file filter of dialog
dlg.Filter = "pdf files (.pdf) |.pdf;";
dlg.ShowDialog();
if (dlg.FileName != null)
{
// use the LoadFile(ByVal fileName As String) function for open the pdf in control
axAcroPDF1.LoadFile(dlg.FileName);
}
}
} -
Matthias Gassner 1 Reputation point
2022-06-23T07:22:59.423+00:00 wcf:
public DataSet GetData(int value)
{
DataSet dataSet = new DataSet();
dataSet.ReadXml(@"C:\Users\matga\source\repos\Testtest\WCF_Service\WCF_Service\data.xml");
return dataSet;
}wpf:
ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();
public MainWindow()
{
InitializeComponent();dgv.ItemsSource = client.GetData(1).Tables["CD"].DefaultView; label.Content = client.GetData(1).Tables.Count; }
-
Matthias Gassner 1 Reputation point
2022-06-23T07:28:44.623+00:00 WCF:
public class Service1 : IService1
{
private ManageXML manageXML = new ManageXML();
public DataSet GetData()
{
return manageXML.MyDataSet;
}public void UpdateData(DataSet ds) { manageXML.UpdateXML(ds); } } public class ManageXML { private string path = @"C:\Users\matga\source\repos\Testtest\WCF_Service\WCF_Service\data.xml"; public DataSet MyDataSet { get; set; } = new DataSet(); public ManageXML() { MyDataSet.ReadXml(path); } public void UpdateXML(DataSet ds) { MyDataSet = ds; MyDataSet.WriteXml(path); } }
WCF Interface:
[ServiceContract]
public interface IService1
{[OperationContract] DataSet GetData(); [OperationContract] void UpdateData(DataSet ds); }
WPF:
ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();
public MainWindow()
{
InitializeComponent();dgv.ItemsSource = client.GetData(1).Tables["CD"].DefaultView; label.Content = client.GetData(1).Tables.Count; }
// "CD" change to your Table
-
Matthias Gassner 1 Reputation point
2022-06-23T07:56:36.07+00:00 private void update_Click(object sender, RoutedEventArgs e)
{
DataTable dt = DataGridtoDataTable(dgv);DataSet ds = new DataSet("Catalog"); ds.Tables.Add(dt); client.UpdateData(ds); } public DataTable DataGridtoDataTable(DataGrid dg) { dg.SelectAllCells(); dg.ClipboardCopyMode = DataGridClipboardCopyMode.IncludeHeader; ApplicationCommands.Copy.Execute(null, dg); dg.UnselectAllCells(); String result = (string)Clipboard.GetData(DataFormats.CommaSeparatedValue); string[] Lines = result.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None); string[] Fields; Fields = Lines[0].Split(new char[] { ',' }); int Cols = Fields.GetLength(0); DataTable dt = new DataTable("CD"); //1st row must be column names; force lower case to ensure matching later on. for (int i = 0; i < Cols; i++) dt.Columns.Add(Fields[i].ToUpper(), typeof(string)); DataRow Row; for (int i = 1; i < Lines.GetLength(0) - 1; i++) { Fields = Lines[i].Split(new char[] { ',' }); Row = dt.NewRow(); for (int f = 0; f < Cols; f++) { Row[f] = Fields[f]; } dt.Rows.Add(Row); } return dt; }