none
Übergabe eines var Parameters (Var -> String -> Var ?) RRS feed

  • Frage

  • Hallo zusammen,

    ich habe folgendes Problem:

    Ich habe in WPF eine Suchmaske-UserControl in der eine linq Query (querySearch) gebildet wird. Die erzeugte var query soll nun an Database-UserControl Klasse übergeben werden und damit die das myDataGrid über Bindings gefüllt werden.

    myDataGrid.ItemsSource = querySearch.ToList();

    Allerding gelingt es mir nicht die var querySearch an die Database-UserControl Klasse übergeben, da über dem Versuch der Übergabe über einen OnExitHandler, bekomme ich den Fehler "Das kontextabhängige Schlüsselwort var darf nur in einer lokalen Variablendeklaration oder im Skriptcode verwendet werden". Andere Datentypen können jedoch ohne Probleme übergeben werden...

    Gibt es eine Möglichkeit den var querySearch zur Übergabe in einen String umzuwandeln und in der Database-UserControl dann wieder in einen var zurückzuverwandeln?

    Vielen Dank im Voraus für eure Unterstützung

    Mittwoch, 25. März 2020 22:28

Antworten

  • Hi Tobi,
    du kannst einen Ausdrucksbaum (expression tree) aufbauen und als Parameter übergeben.

    Eine weitere Möglichkeit ist die Übergabe einer Func. Dazu folgendes Beispiel:

    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Linq;
    using System.Windows.Forms;
    using WindowsFormsApp16;
    
    namespace WindowsFormsApp1
    {
      public partial class Form16 : Form
      {
        public Form16()
        {
          InitializeComponent();
          this.Load += Form16_Load;
        }
    
        private TextBox tb = new TextBox() { Text = "10", Dock = DockStyle.Top };
        private Button btn = new Button() { Text = "Load data", Dock = DockStyle.Top };
        private DataGrid myDataGrid = new DataGrid() { Dock = DockStyle.Fill };
    
        private DataModel dm = new DataModel();
        private void Form16_Load(object sender, EventArgs e)
        {
          this.Controls.AddRange(new Control[] { myDataGrid, btn, tb });
          this.btn.Click += Btn_Click;
        }
    
        private void Btn_Click(object sender, EventArgs e)
        {
          int tbNum = 0;
          int.TryParse(tb.Text, out tbNum);
          this.myDataGrid.DataSource = dm.GetData(new Func<Data, bool>((d) => d.ID > tbNum));
        }
      }
    }
    
    namespace WindowsFormsApp16
    {
      public class DataModel
      {
        public DataModel()
        {
          for (int i = 1; i < 100; i++) dataList.Add(new Data() { ID = i, Col1 = $"Row {i}" });
        }
    
        private List<Data> dataList = new List<Data>();
    
        internal object GetData(Func<Data, bool> func) => (dataList.Where(func)).ToList();
      }
    
      public class Data
      {
        public int ID { get; set; }
        public string Col1 { get; set; }
      }
    }


    --
    Best Regards / Viele Grüße
    Peter Fleischer (former MVP for Developer Technologies)
    Homepage, Tipps, Tricks


    Donnerstag, 26. März 2020 08:09