Databindings are not working

noname 6 Reputation points
2022-05-22T19:42:59.943+00:00

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;
        }
    }
.NET
.NET
Microsoft Technologies based on the .NET software framework.
3,395 questions
C#
C#
An object-oriented and type-safe programming language that has its roots in the C family of languages and includes support for component-oriented programming.
10,274 questions
XAML
XAML
A language based on Extensible Markup Language (XML) that enables developers to specify a hierarchy of objects with a set of properties and logic.
766 questions
{count} votes

12 answers

Sort by: Most helpful
  1. 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);
    }
    }
    }

    0 comments No comments

  2. 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;  
    	}
    
    0 comments No comments

  3. 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

    0 comments No comments

  4. 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;  
    
        }
    
    0 comments No comments