Laden...

Forenbeiträge von Briefkasten Ingesamt 446 Beiträge

14.02.2022 - 11:00 Uhr

Ich habe hier noch etwas intressantes gefunden, damit sollte es theoretisch auch klappen:

https://docs.microsoft.com/en-us/azure/app-service/app-service-hybrid-connections

13.02.2022 - 20:03 Uhr

Habe die Antwort hier gefunden:

Use labels to provide per-environment configuration values. - Azure App Configuration

Ich kann mit den Labels die Konfigwerte Gruppieren bzw. Taggen und nacher mit


config.AddAzureAppConfiguration(options =>
                options
                    .Connect(settings.GetConnectionString("AppConfig"))
                    // Load configuration values with no label
                    .Select(KeyFilter.Any, "meinTagbzw.Label")
            );

abfragen.

13.02.2022 - 19:21 Uhr

Hallo,

ich habe in Azure eine App Configuration und dort sind auch bereits Werte mit Azure Vault Referenziert.
Gibt es eine möglichkeit, dass ich mit dem ConnectionString nur die "normalen" AzureWerte Abfragen gehe (also ohne die Referenced Azure Vault Keys)?

Ich bekomme derzeit die Meldung "No key vault credential or secret resolver callback configured, and no matching secret client could be found" was ja auch stimmt, aber ich brauche für die aktuelle Applikation die Referenced Azure Vault Keys nicht. Kann man die einzellnen Werte Gruppieren bzw. Taggen und darauf Berechtigungen zum Abfragen geben? Die App verwendet wie gesagt den Connection String und keine Managed Idendity.
lg

04.01.2022 - 17:51 Uhr

Hi,

wir habe noch einige Legacy Systeme die On-premise gehosted sind. Das ganze System nach Azure verschieben geht so schnell nicht. Daher würde ich gerne mit kleinen Services anfangen diese in Azure hosten.

Meine Frage ist, wie kann ich am Besten Daten (z.b. eine oder mehrere Tabellen) von meiner On-premise SQL Datenbank in meine Azure SQL "replizieren" bzw. importieren. Derzeit habe ich zwei Szenarion:

  • einige kleine Datensätze und
  • einige millionen Datensätze

die täglich zu importieren sind.

Im On-premise System haben wir die Daten mittels SSIS Packages in die jeweiligen Datenbanken importiert. Gibt es so eine ähnliche möglichkeit auch von On-premise nach Azure Sql?

Derzeit habe ich folgende Möglichkeiten gefunden:

  • SSISDB
  • Über eine Schnittstelle die Daten der DB bereitstellen und diese dann über einen Azure gehosteteten Service in die Sql Azure DB einspielen
  • azure-arc

Vermutlich wird es noch weitere (bessere?) Möglichkeiten geben. Habt ihr dazu Erfahrungswerte die ihr hier teilen könnt? Wichtig wäre auch, dass wir schnell Informiert werden, sollte ein Import fehlschlagen um rasch handeln zu können.

07.11.2021 - 12:54 Uhr

Du meinst sowas oder?


public record CreateSessionWithCredentialsRequest : CreateSessionRequest
{
    public CreateSessionWithCredentialsRequest(string username, string password, string RequestToken) 
        : base(RequestToken)
    {
        Username = username;
        Password = password;
    }

    public string Username { get; set; }
    public string Password { get; set; }
}

und in kurz


public record CreateSessionRequest(string RequestToken);

public record CreateSessionWithCredentialsRequest(string RequestToken, string Username, string Password) : CreateSessionRequest(RequestToken);

PS: Ich habe C# LangVersion 9.0 aktiviert.

Beim record hast du im Unterschied zur normalen Klasse folgendes:

An override of Object.Equals(Object).
A virtual Equals method whose parameter is the record type.
An override of Object.GetHashCode().
Methods for operator == and operator !=.
Record types implement System.IEquatable<T>.

Quelle: https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/tutorials/records#characteristics-of-records

28.02.2020 - 14:44 Uhr

Du kannst deine app auch über das DevicePortal (muss am Handy unter den Developer Settings aktiviert sein) uploaden und so installieren.

04.06.2019 - 07:54 Uhr

Win32 Games machen im Store durchaus Sinn. In dem Zusammenhang möchte ich nochmal auf https://sharpgis.net/post/2019/05/14/The-future-UWP hinweisen.

30.05.2019 - 20:50 Uhr

Danke, den GTM kannte ich noch nicht!

30.05.2019 - 14:31 Uhr

Hi,

wie handhabt ihr Google Analytics & DSGVO auf euren privaten Seiten? Holt ihr euch die Einverständnis der Besucher oder habt ihr die Google Analytics Einstellungen so reduziert, dass keine Einverständnis notwendig wäre (zu letzterem habe ich noch nicht wirklich eine Checkliste mit Einstellungen gefunden die dies erlauben würden)? Oder seid ihr auf andere Tracking Tools gewechselt?

15.05.2019 - 19:20 Uhr

Hier noch ein guter Artikel zu Win UI 3.0 und dessen Auswirkungen

https://sharpgis.net/post/2019/05/14/The-future-UWP

k

09.05.2019 - 20:02 Uhr
  • Visual Studio Code als Cloud Dienst

Ist das sowas wie gitpod?

09.05.2019 - 19:09 Uhr

Und was ist das diesjährige Resümee?
[1].NET 5.0
[2]UWP Validation
[3]WIN UI 3.0

ad 1.) Ziemlich cool und dass so etwas kommen wird war auch irgendwie, irgendwann zu erwarten - now its gonna happen
ad 2.) Eher meh... Jetzt kommt zwar die UWP Validation, aber dass IDataErrorInfo für UWP unter einem neuen Namespace (als System.Component) veröffentlich wird, find ich kacke. Jetzt braucht man wieder einen Workaround, dass man die alten Validation Sachen verwenden kann
ad 3.) Bereits auf der Build 2018 wurde das Projekt Win UI vorgestellt. Jetzt zur Build 2019 ist das ganze Ding immer noch in einem Stadium, in dem man es nicht wirklich sinnvoll einsetzen kann. Jetzt wird Version 3.0 verkündigt mit u.a. einem Feature (Library auch von älteren Windows 10 Versionen nutzbar), dass bereits für die Vorgängerversion hätte gelten sollen.

Ich hätte mir nach .NET Core 3 irgendwie erhofft, dass jetzt was Konkretes zu einem Plattformübergreifenden UI Framework (mit XAML wuwuwuwu) geben wird. Aber es scheint wohl so, dass man auf AvalonUI und Konsorten zurückgreifen muss. Vlt. wird das dann später eh im Zuge einer neuen .NET Version übernommen? (wie in der JAVA Welt)!

28.03.2016 - 10:03 Uhr

hi,

welche Exception wird geworfen? Bei AppDomains ist es immer wichtig, dass du angibst aus welcher AppDomain der Code ausgeführt werden soll. Wenn du nichts angibst, wird der Code in der DefaultAppDomain exekutiert.

Schau dir vlt. mal folgedes Beispiel an.

10.10.2015 - 19:03 Uhr

Hallo,

hier gibt es natürlich mehrere Möglichkeiten dies umzusetzen. Aber WebApi und AngularJS auf zwei Projekte auf zu teilen ist schon mal gut. Ob du die AngularJS Anwendung dann auf einer ASP.NET MVC Seite "hostest" oder eine statische HTML Seite hinterlegst ist Geschmackssache.

Im Normalfall und der Einfachheitshalber legst du zum Deployen deine Projekte in der Default Web Site ab, oder du erstellst eine neue (was vor zu ziehen wäre). Diese Site ist dann im optimalen Fall über den Port 80 aufrufbar.

In dieser Site kannst du, dann die zwei Projekte bzw. Anwendungen hinterlegen. Würden die zwei Anwendungen unter verschiedenen Ports laufen hast du mit CORS zu tun, was du vermeiden möchtest.

02.10.2015 - 13:49 Uhr

@Briefkasten, das ist nicht das Problem, um das es geht.

LaTino

Keine Casts - überlesen.

[Edit]
Ohne Casts wirst du aber nicht drum herum kommen - mit allem anderen bist du wieder zu sehr gebunden und unflexibel.

02.10.2015 - 13:38 Uhr

Eine Wrapper Klasse brauchst du nicht um abgeleitete Klassen in eine Liste zu stecken, weil das IEnumberable Interface für T Kovaraint ist.


using System;
using System.Collections.Generic;

public class Program
{
	public static void Main()
	{
		List<Abase> basetypelist = new List<Abase>();
		basetypelist.Add(new B());
		basetypelist.Add(new C());
		foreach (var a in basetypelist)
		{
			if (a.GetType().Equals(typeof (C)))
			{
				C c = (a as C);
				Console.WriteLine(a.GetType() + c.foo());
			}
			else
			{
				Console.WriteLine(a.GetType());
			}
		}
	}
}

public abstract class Abase
{
}

public class B : Abase
{
}

public class C : B
{
	public String foo()
	{
		return "foo";
	}
}

https://dotnetfiddle.net/aT98ZI

02.10.2015 - 13:30 Uhr

ich brauche eine etwas komplexere Datenstruktur. Macht es Sinn zwei Dictionaries ineinander zu verschachteln oder ist das eher unschön und unsauber?

Wofür verwendest du die Datenstrukturen? Wie sehen deine Daten aus die du speichern willst.
Werden viel Daten zur Laufzeit eingefügt, oder willst du mehr darin suchen?

Ob für deinen Fall zwei verschachtelte Dictionary sinnvoll sind lässt sich von deinem Ausgangspost nicht beantworten.

30.09.2015 - 18:22 Uhr

Eine Assembly über eine Netzwerkresource laden halte ich für keine gute Idee.

Nun stelle ich mir vor, meine Projekte landen auf verschiedenen Clients im Unternehmen. Nun möchte ich das Skin abändern und den Clients zur Verfügung stellen. So wie ich es bisher gemacht habe, müsste ich auf jedem Client die DLL wieder austauschen (viel Arbeit bei 120 PC-Arbeitsplätzen).

Deine Anwendung musst du so oder so auf die Arbeitsrechner deployen - eine Assembly mehr spielt da auch keine Rolle.

Willst du die Skins mit der Zeit ändern, kannst du das über ein Software update machen. Siehe auch hier updateSystem.NET

26.09.2015 - 22:50 Uhr

Was spricht gegen die herkömmlichen Resource Files? Zumindest habe ich das immer so gehandhabt, dass zum Request die passende Culture gesetzt wird.

Die URL Localization scheinen ein nettes Feature zu sein.

26.09.2015 - 14:15 Uhr

Hallo,

ich beschäftige mich seit kurzem mit MEF und PRISM.

Mein Ziel ist es, für die Exportierten Views auto. das ViewModel zu discovern und in die View zu injected.

Im BootStrapper für die Shell sieht das bei mir momentan so aus (MainWindow und MainWindowViewModel haben jeweils das Export Attribut gesetzt.):


        protected override void ConfigureAggregateCatalog()
        {
            RegistrationBuilder registrationBuilder = new RegistrationBuilder();
            //inject the mainwindowviewmodel into the datacontext property
            registrationBuilder.ForType<MainWindow>().ImportProperty<MainWindowViewModel>(p => p.DataContext);
            //add current assembly to catalog
            this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(Bootstrapper).Assembly, registrationBuilder));

        }

Die Applikationsmodule befinden sich in eigenen Assemblies und beinhalten die Views (UserControls) und ViewModels. Das hat zur Folge, dass ich im Projekt in dem sich die Shell befindet keine Projektreferenzen auf die Module habe und kein Import auf den DataContext setzen kann weil der Modul Typ nicht bekannt ist.

Im Prinzip möchte ich für alle Exportierte Views (in den Assemblie Modulen) folgendes ausführen

            registrationBuilder.ForType<View>().ImportProperty<ViewModel>(p => p.DataContext);

Meine Namenskonventionen sehen es so vor, dass die ViewModels sich aus "Viewnamen" + "ViewModel" zusammensetzen. Falls das in irgendeiner weise helfen sollte.

Wäre es möglich in einem eigenen erstellten Export Attribut als Parameter das zu importierende ViewModel anzugeben, dass dann die ImportProperty() Methode ausführt? Aber dazu fehlt mir ja dann wieder der CompositeContainer.

Wie kann ich das Problem lösen?

10.05.2014 - 16:31 Uhr

Hallo Abt,

deinem Blogeintrag nach zu urteilen, stellt die enge Verzahnung des Controllers und die Auswertung der Daten (die meiner Meinung nach ins ViewModel gehören) kein kosmetisches Problem dar.

Es scheint also nach dem ASP.NET MVC Prinzip in Ordnung zu sein, wenn hier keine strikte Logische Code Trennung statt findet?

Ich werde mal schauen in wie aufwendig es sein wird eine Klasse zu schreiben, die sich darum kümmert die HTTP-Get und HTTP-Post Request zu handeln und auf die entsprechenden ViewModels und deren Methoden weiter zu leiten.

Dann entfällt genau dieser unnötige "Zwischenschritt" in dem ein passender Controller erstellt werden muss der dann das jeweilige ViewModel instanziert und deren Methoden und Daten weiterleitet bzw. aufruft.

Sollte eigentlich nicht so schwer sein zu implementieren?

10.05.2014 - 11:14 Uhr

Hallo,

ich habe längere Zeit mit WPF gearbeitet (das ist jetzt auch wieder etwas her) und habe mich vor kurzem mit JavaEE JSF beschäftigt und schau mir nun ASP.NET MVC 4 genauer an.

In WPF Anwendungen konnte ich die Business Logik gut mit dem MVVM Pattern Trennen. Also alles was irgendwie zwischen View und dem Business war landete im ViewModel. So z.B. Validations Rules.

Dieses Prinzip konnte ich gut im JAVA EE JSF Projekt anwenden. Ich schreibe deshalb, dazu kurz was wie man das in JSF macht, damit man die unterschiede zwischen den beiden Technologien erkennt.

Man legt seine View, also die aufrufbare Page an und hat dann für jede dieser Pages ein ViewModel erstellt die für die View angepasst sind (natürlich könnte man die ViewModeles auch auf anderen Views wieder verwenden und es gibt auch Fälle wo es durchaus Sinn macht das zu tun).

Die Pages können dann durch den Viewnamen aufgerufen werden. Es gibt diverse RewriteRule Libaries in denen man die URLs zu den Seiten konfigurieren kann ohne in Berührung mit einem Controller zu kommen.

Ein Viewcode die auf eine Propertie oder Funktion zugreifen könnte in JSF z.B. so aussehen:


[...]
<customcontrol:dataTable id="dataTable" var="Element" value="#{ViewModel.ListeMitElementen}" scrollRows="60" scrollable="true" liveScroll="true" scrollHeight="400"
                                     filteredValue="#{ViewModel.FilterPropertie}">  
                            <p:column headerText="name">  
                                <h:outputText value="#{Element.name}" />  
                            </p:column>  
                            <p:column headerText="bearbeiten">  
                            <p:column headerText="lsöchen">  
                                <StandardLib:commandButton action="#{ViewModel.removeElement(Element)}" value="löschen" />
                            </p:column>  
                        </p:dataTable>
[...]

Daraus ergibt sich die Situation, dass man einen Controller im herkömmlichen Sinn wie in ASP.NET nicht mehr benötigt. Einzig allein um z.B. Encoding, Authentifizierung, ReWriteRules und der gleichen zu realisieren. Im Controller taucht kein Code auf der irgenwie etwas mit der View zu tun haben könnte. Genau das stört mich an ASP.NET MVC. Meiner Meinung sind die Views und die Controller viel zu eng mit einander verzahnt und zu viel von einander abhängig.

Auch gibt es, wenn ich mich nicht täusche, kein Best Practice um CustomControls zu realsieren. Man muss auf die ASP.NET Webforms zurückgreifen. Eine andere Methode wäre diese folgend zu realisieren http://www.codeproject.com/Articles/32356/Custom-controls-in-ASP-NET-MVC (macht man das noch so? Der Artikel ist etwas älter)

Validations sind in den Controller und auch die Methoden die die Formulare auswerten. Klar kann man im Controller die Formular Methode dem ViewModel übergeben, aber warum so umständlich?

Meine Frage ist, gibt es Frameworks die diese Problematik angehen und seht ihr das auch in etwa so wie ich?

Würde mich über interessante Beiträge dazu freuen.
SG

PS:Muss zwar mit asp.net mvc4 arbeiten aber würdet ihr dann trotzdem das "Pro ASP.NET MVC 5" buch empfehlen?

06.03.2014 - 22:05 Uhr

Aufgrund des obigen Beitrags von Palladin007 habe ich das Gefühl, dass mein Ansatz nicht so toll war.

Ich hatte mir folgendes Schichten-model vorgestellt:

1.) IDatenstruktur
2.) Datenstrukturklasse die grundlegende Methoden des Interfaces implementiert

3.) Business Model
4.) Erweiterte Datenstrukturklasse die auf Business Model angepasst ist.

Um die Datenstruktur flexibel zu halten, ist die unterste Schicht mit Generizitäten ausgestattet.
Umso höher man in der Schicht ist, umso weniger Generizitäten kann man setzen, da die obersten Schichten ein spezielles Problem abdecken.

Hier ein etwas aufwändigeres Beispiel, das die Problematik aber besser illustriert.

Die unterste Schicht:


    public interface IEdge<W, T, D> : IData<D>
        where W : IComparable<W>
        where T : IVertex<W, D>
    {
        W Weight { get; set; }
        T U { get; set; }
        T V { get; set; }
    }

W - Das Gewicht kann sich je nach Anwendungsfall unterscheiden (int, float, usw)
D - In diese Generizität kann eine x-beliebige Information gespeichert werden. (IData<D>)
T - Falls man eine erweiterte Datenstruktur zusammen bauen will.

 public interface IVertex<W,D> : IData<D>
        where W : IComparable<W>  
    {

        W Weight { get; set; }
        IEnumerable<IEdge<W, IVertex<W, D>, D>> Edges { get; set; }

Die Basisklasse der Datenstruktur sieht dann so aus:

  public class Edge<W, D> : IEdge<W, D>
        where W : IComparable<W>
    {

Diese Datenstruktur soll, in einem Projekt verwendet werden, das ein Schienennetz abbildet. Es gibt daher folgende Klassen "Rail" (Gleis - speichert Informationen zu Zustand, Länge, Materialtyp usw.) und "Connection" (Verbindet mehrere Gleise).

Daraus ergeben sich folgende erweiterte Datenstrukturen (ConnectionVertex und RailEdge)

    public class ConnectionVertex : Vertex<double, Connection>
    {
        public ConnectionVertex()
        {
            this._Edges = new ObservableCollection<RailEdge>(); 
        }
    }
    public class RailEdge : Edge<double, Rail>{}

Die Datenstruktur wurde Schicht für Schicht präzessiert. Algorithmen sind auf den Graphen weiterhin anwendbar, da diese sich auf IEdge und IVertex beziehen. Einzig allein das Kovarianz Problem scheint nicht lösbar zu sein.

Den aus den MSDN Link geht hervor, dass Typen mit dem out Modifizierer keinen getter oder setter haben dürfen. Somit kann ich diesen weder beim Gewicht noch anders wo hier verwenden.

Habe ich in diesem Fall die Constrains ebenfalls missbraucht wie herbivore in Datenstruktur flexibel gestalten meinte? Wie kann ich diese Grundsatz Idee am Besten realisieren? Komplett auf Generizitäten verzichten?

06.03.2014 - 18:44 Uhr

Hallo,

ich bin anscheinend in C# ein bisschen eingerostet was Generizitäten und Casts betrifft.

Für meine Klasse:

    public class Vertex<W,D> : IVertex<W,D>
        where W : IComparable<W>
    {

habe ich eine Extension geschrieben:

public static IEnumerable<IVertex<W, D>> Depth_First_Traversal<W, D>(this IVertex<W, D> s, IList<IVertex<W, D>> visited)
            where W : IComparable<W>
        {

Nun möchte ich diese Extension aufrufen was mir nur mit der Angabe vom Typ IVertex gelingt:


            Vertex<int, object> v1 = new Vertex<int, object>();
            v1.Depth_First_Traversal<int, object>(new List<IVertex<int, object>>());

Aber eigentlich sollte das doch auch so gehen:

            Vertex<int, object> v1 = new Vertex<int, object>();
            v1.Depth_First_Traversal<int, object>(new List<Vertex<int, object>>());

was aber in einem Fehler resultiert:> Fehlermeldung:

Error 3 Argument 2: cannot convert from 'System.Collections.Generic.List<Get.DataStructure.Vertex<int,object>>' to 'System.Collections.Generic.IList<Get.DataStructure.IVertex<int,object>>'

Ich kann beim Parameter "IList visited" auch eine Liste übergeben (welche ja das Interface implementiert). Geht mein vorhaben bei Listen nicht? Falls ja, gibt es dafür ein Workaround?

06.03.2014 - 14:01 Uhr

Hallo,

ich möchte meine Datenstruktur möglichst flexibel gestalten und dabei ist mir etwas untergekommen von dem ich gerne eure Meinung wüsste.

Hier ein ganz simples Beispiel (es handelt sich um eine verkette Liste wie man sieht):

public interface IData<T>
    {
        T Value { get; set; }
    }
    public interface ISNode<T>
        where T : ISNode<T>
    {
        T Right { get; set; }
    }
    public interface INode<T,D> : IData<D>, ISNode<T>
        where T : INode<T,D>
    {
        
        T Left { get; set; }
    }

Eine verkettete Liste benötigt, je nach dem ob es eine einfache oder doppeltverkettete Liste ist, einen Zeiger auf das nächste Element. Um dies zu realisieren habe ich festgelegt, dass T vom Typ INode<T,D> sein muss. Jedoch wäre es auch genau so möglich, den Typ wie folgt zu definieren:

 public interface INode<D> : IData<D>
    {
        INode<D> Left { get; set; }
    }

Ich denke die erste generische Variante ist schöner, weil man verschiedene Typen angeben kann und der Cast Vorgang weg fällt. Bei viele generische Typen, kann es in der Handhabung schnell unübersichtlich werden. Eine Möglichkeit wäre dann den Typ fest zu legen:

 public class Node<D> : INode<Node<D>, D>
    {
        public Node()
            : base()
        {
        }
        public Node(D Data)
        {
            this.Value = Data;
        }
[...]
    }

Nun welche Methode gefällt euch besser? Was sind eurer Meinung die Vor- und Nachteile der zwei Varianten?

Hintergrund ist der, dass auf die oben beschriebenen Datenstrukturen Algorithmen per Extensions ausgeführt werden sollen und diese sollen dann auf möglichst vielen Klassen funktionieren die die Datenstruktur implementieren.

10.12.2012 - 22:03 Uhr

Ich glaube ich habe das Problem gefunden.

Ich habe von meinen 3 Klassen jeweils 3 Datasources. Wenn ich den Report mit View Code öffne sehe ich aber, dass nur ein DataSet1 vorhanden ist, welches auf ObjectDataSourceType Product verweist. Das heißt das Dataset für Delivery und Adress fehlt. Kann mir jemand sagen, wie ich die hinzufügen kann?

PS: Den Invoicemaker kann ich leider nicht öffnen, das es sich um ein Vb Projekt handelt. Den Projekttyp kann ich nicht nach installieren, da beim Setup ein Fehler auftritt.

[Edit] Ich mach das ganze jetzt mit WPF Printing bzw. FlowDocuments.

10.12.2012 - 12:41 Uhr

Hallo,

danke für die Antworten. Der Ausdruck einer Bestellung soll so aussehen:

Das Model zur Bestellung sieht so aus:

 public class Delivery
    {
        public Address Destination { get; set; }

        public IEnumerable<Product> Products { get; set; }
        
				[...]
    }

Und die Produkte die eine Bestllung enthaltet:

    public class Product
    {
        public string Name { get; set; }

        public int Weight { get; set; }
    }

Geht sowas mit den Reports? Es ist auch so, dass das ClientProgramm die Bestellungen über einen soap erhält und diese sofort ausdrucken muss. Die Vorschau sprich den Reportviewer brauch ich nicht zwingend.

09.12.2012 - 21:33 Uhr

verwendetes Datenbanksystem: Model

Hallo,

ich muss Bestellungen ausdrucken. Ich hab mir gedacht, dass ist am einfachsten wenn ich dafür Reports verwende?

Eine Bestellung (Delivery) enthält eine Liste mit den Produkten.

Jedes mal wenn eine Bestellung rein kommt setze ich die Bestell-Daten im Reportviewer.

        protected void Deliveries_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
        {
            if (e.Action.Equals(NotifyCollectionChangedAction.Add))
            {
                
                //delete old reports
                if (ReportViewer.LocalReport.DataSources.Count.Equals(1))
                    ReportViewer.LocalReport.DataSources.RemoveAt(0);

                List<Delivery> lst = new List<Delivery>();
                lst.Add(e.NewItems.Cast<Delivery>().First<Delivery>());

                BindingSource thisIsABindingSource = new BindingSource();
                thisIsABindingSource.DataSource = lst;
                ReportDataSource rds = new ReportDataSource("Delivery", thisIsABindingSource);

                ReportViewer.ProcessingMode = ProcessingMode.Local;
                ReportViewer.LocalReport.EnableExternalImages = true;
                ReportViewer.LocalReport.ReportPath = Environment.CurrentDirectory + "\\Reports\\Report.rdlc";
                ReportViewer.LocalReport.DataSources.Add(rds);
                ReportViewer.RefreshReport();

            }
        }

Er verwendet die angegebene Reportvorlage, jedoch werden die Felder nicht mit den Werten vom übergebenen Model (Delivery) gesetzt. Hat jemand eine Idee woran das liegen könnte? Im Prinzip ist es ja die gleiche vorgehenseweise wie hier.

Ich habe im Internet gesehen, dass man das Model auch als DataTabel übergeben kann.

Jedoch weiß ich nicht wie ich das Model welches ja nochmal eine Liste enthält in eine DataTabel umwandeln kann. Soll ich in die DataTabel nochmal eine DataTabel übergeben welche alle Produkte enthält?

sg

31.05.2012 - 12:45 Uhr

Ich bin mir nicht sicher ob du das meinst.

Erstell als erstes deinen "base" Style.

<Style x:meineButtons ... />
<Style x:meineButtons1 basedon={StaticResource x:meineButtons} ... />
<Style x:meineButtons2 basedon={StaticResource x:meineButtons} ... />
<Style x:meineButtons3 basedon={StaticResource x:meineButtons} ... />

Bei den erweiterten meinButtons1-3 musst du dann noch das ControlTemplate setzen. In das ControlTemplate baust du deine Grafiken dann ein.

http://msdn.microsoft.com/de-de/library/ms753328%28v=vs.90%29.aspx

31.05.2012 - 12:31 Uhr

Hallo,

ich würde das ADO.NET Entity Framework verwenden. So kannst du in wenigen Schritten eine Anwendung erstellen die über einen DB Zugriff verfügt. Du kannst dich also um die wesentliche Aufgabe kümmern. Dem anzeigen und bearbeiten der Daten.

Selber SQL Statments schreiben würde ich vermeiden. Generell sind „hardcoded“ Sachen in meinen Augen unnötiger Ballast. Außerdem steckt dann doch einige Arbeit dahinter, wenn man das alles selber machen will. Diese Zeit kannst du dir sparen.
Was ist wenn sich etwas in der DB ändert? Das Model mit dem Entity Framework hast du schnell neu generiert.

Solltest du trotzdem lieber selber mit eigenen SQL Statments arbeiten wollen, würde ich den Einsatz von Views und SPS empfehlen.

31.05.2012 - 12:14 Uhr

Hallo,

ich sehe das ähnlich wie ujr.

Wenn ich gerade vor 2 Jahren ein großes SL Projekt hatte, das vor kurzem fertiggestellt wurde, bringt das eine große Ungewissheit für den Kunden und den Entwickler mit sich.
Wie kann man ein ein solches Projekt weiter pflegen? Was ist wenn der Kunde in x Jahren noch das und das gerne hätte?

Ich habe eigentlich schon seit Erscheinen von SL es immer vermieden etwas damit zu machen, wegen eben der geringen Verbreitung und der Aussicht, dass das Projekt einmal eingestellt wird.

Dass es dazu so schnell kommt hätte ich aber nicht gedacht. Hier stiehlt sich MS aus der Verantwortung und lässt seine Kunden im Regen stehen.

30.05.2012 - 12:19 Uhr

Hallo,

Silverlight konnte sich im Internet nicht etablieren. Das Mono Entwicklungsteam stellt als Konsequenz das Monolight Projekt ein.

http://www.heise.de/newsticker/meldung/Freier-Silverlight-Klon-Moonlight-eingestellt-1586174.html

Wie wird sich diese Nachricht auf die .NET Welt auswirken? MS hat ja schon früher durchblicken lassen, dass SL nicht mehr weiterentwickelt wird.

Ich vermute, dass die Nachfrage von Silverlight Projekten zurückgehen wird. Ich bin auch der Meinung, dass .NET Client Webanwendungen zunehmend, aufgrund von HTML5, JS, AJAX, Processing usw. uninteressanter werden.

19.04.2012 - 13:50 Uhr

Hallo,

du könntest auch probieren das Fenster mit einer Animation langsam transparent zu machen.

15.04.2012 - 14:36 Uhr

Du hast den DataContext auf dein Control gesetzt. Die Property Score1 gibts in deinem Control nicht, weil diese im MVVM vorhanden ist.

Lass das setzen des DataContext im UserControl weg. Du willst ja als DataContext das MVVM haben.

Bzw. du hast im Prinzip das hier gemacht:

Wir gehen davon aus, dass das UserControl genau den gleichen DataContext wie das Window besitzt. Sämtliche Standard UserControls, wie zum Beispiel TextBox'es, ListViews, erben den DataContext vom Übergeordneten Control. Weil aber das UserControl den DataContext auf sich selber setzt, haben wir einen anderen DataContext wie beim Window.<-- hier wird ja eigentlich das MVVM erwartet

Mach im UserControl das Binding Relativ dann müsste es gehen.

Diese Problem kann man mithilfe der RelativeSource umgehen. Hätte das Binding wie folgt ausgeshene, wäre es egal, welchen DataContext das UserControl besitzt.

<TextBlock Text="{Binding Path=Score,RelativeSource=
{RelativeSource Mode=FindAncestor,AncestorType={x:Type local:UserControlName}}}"></TextBlock>

Dennoch gibt es Gegebenheit in dem ein Binding ohne RelativeSource berechtigt ist. http://get-the-solution.net/2009/02/20/itemssource-zu-usercontrol-hinzufugen/

[EDIT] Sry, es muss natürlich Score heißen, weil du ja auf die DP des Control binden willst.[/Edit].

14.04.2012 - 20:30 Uhr

Mit einem DataTrigger im DataTemplate ist sowas möglich.

  <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}, Path=IsSelected}" Value="True">

Siehe auch http://get-the-solution.net/2009/03/28/listbox-selecteditem-zusatzinformationen-anzeigen/

14.04.2012 - 18:42 Uhr

verwendetes Datenbanksystem: <MySQL>

Hi, wie kann ich mittels C# auf MySQL-Datenbanken zugreifen? http://www.codeplanet.eu/tutorials/csharp/5-verbindung-zum-mysql-server-mit-csharp.html

oder noch interessanter, dass ich mit C# funktionen und Methoden in ne DLL schreibe, und diese DLL dann mit PHP verwenden kann?

Ich glaube, das geht nur wenn du für PHP eine Extension schreibst, die auf deine C# dll zugreift. Dann kannst du vom PHP aus auf deine DLL Funktionen zugreifen.

C# DLL <PHP Extension> PHP Skript

06.04.2012 - 18:37 Uhr

Von Canvas ableiten sollte kein Problem sein.

Warum fügst du deine Controls nicht über Children.Add() ein?

20.03.2012 - 19:11 Uhr

verwendetes Datenbanksystem: System.Xml.Linq;

Hallo,

ich speichere mein Model mittels

   
        public static void Save(this model g, String pfilename)
        {         using (FileStream fs = new FileStream(pfilename, FileMode.Create))
            using (XmlDictionaryWriter writer = XmlDictionaryWriter.CreateTextWriter(fs))
            {
                NetDataContractSerializer serializer = new NetDataContractSerializer();  // no type specified
                serializer.WriteObject(writer, g);

            }

Allerdings möchte ich die Speicher Extension so umgestalten, dass der Content in ein XElement gespeichert wird. Damit wäre man flexibler und könnte z.B. unterschiedliche modele zusammen abspeichern. Z.B. so:


XElement root = new XElement("Root");
XElement model = this.Model.Save();
XElement irgendwas = Irengedwas.getXElement();

root.Add(model);
root.Add(irgendwas);

SaveFile(root);


Allerdings weiß ich nicht wie ich den content vom NetDataContractSerializer in das XElement rein bekomme. Hat jemand eine Idee?

02.03.2012 - 21:35 Uhr

Hallo,

ich möchte ein TimeLine Control erstellen um z.B. Geschichtliche Ereignisse zu visualisieren.

Im Prinzip besteht die TimeLine aus einem Balken bei dem man nach Links als auch nach rechts also z.B. 20 Jahre vor bzw. zurück scrollen kann.

In diesem Balken werden alle Einträge über TimeLineElemente angezeigt, welche z.B. die Eigenschaft: Betrifft Jahr: 1914 Beschreibung:.

Wenn man in den Balken also in die TimeLine hineinscrollt soll die Skalierung auf Monate wechseln.

Siehe auch das Bild Anhang. Ich hoffe ich habe das nicht all zu konfus beschrieben.

Nun frage ich mich, wie man so ein Control am besten erstellt. Theoretisch könnte man das doch über ein UserControl mit einer ListBox machen die horizontal ausgerichtet ist.

Ich müsste zu den hinzugefügten TimeLineElementen dynamisch die restlichen Elemente in die ListBox als "platz Füller" hinzufügen.

Allerdings bin ich mir nicht sicher ob ich da bei vielen Elementen Performance Probleme bekomme. Auch das zoomen wird da etwas schwieriger. Vlt. kann man das so lösen http://stackoverflow.com/questions/850554/zoom-control-to-wpf-form

Eine andere Möglichkeit wäre ein Canvas + Controls welche die TimeLine Elemente darstellen. Dann dürfte das zoomen kein Problem darstellen.

Was meint ihr?
lg

28.02.2012 - 19:00 Uhr

Oh... stimmt. das hatte ich ganz übersehen. :S

Jetzt funktionierts 😃

28.02.2012 - 18:33 Uhr

Danke für dein Bsp.

Ich habe es nochmal vereinfacht, weil ich es nicht zum Laufen bringe.
Habe ein Windows WPF Projekt mit folgendem Code erstellt:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <DockPanel>
        <Button DockPanel.Dock="Top" Click="Button_Click" Height="20"></Button>
        <Canvas DockPanel.Dock="Top" x:Name="_canvas" Background="Gray">
            <Canvas.Resources>
                <Style TargetType="{x:Type Button}">
                    <Style.Triggers>
                        <EventTrigger RoutedEvent="Button.Loaded">
                            <BeginStoryboard>
                                <Storyboard>
                                    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetProperty="(UIElement.Opacity)">
                                        <SplineDoubleKeyFrame KeyTime="00:00:00.9000000" Value="1" />
                                    </DoubleAnimationUsingKeyFrames>
                                </Storyboard>
                            </BeginStoryboard>
                        </EventTrigger>
                    </Style.Triggers>
                </Style>
            </Canvas.Resources>
        </Canvas>
    </DockPanel>
</Window>

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            _canvas.Children.Add(new Button() { Width = 20, Height = 20 });
        }

Der Button wird ohne Transparent Effekt eingeblendet. Ich schau mal weiter, vlt finde ich noch den Fehler.
LG

28.02.2012 - 17:10 Uhr

Hallo,

auf meinem Canvas können zur Laufzeit neue Controls hinzugefügt werden. Ich würde diese gerne mittels einer Animation einblenden. Bin leider nicht so der Animations Profi.

Ich habe probiert, zum Control das zum Canvas hinzugefügt wird, nach dem es fertig geladen wurde die Opacity von 0 auf 1 zu setzen.

    <Style TargetType="{x:Type local:myControl}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:myControl}">
                  [[..]]]
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <EventTrigger RoutedEvent="Loaded">
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation Storyboard.TargetProperty="Opacity" From="0.0" To="1.0" Duration="0:10:5" />
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Style.Triggers>
    </Style>

Allerdings passiert gar nichts. Hat jemand eine Idee warum? Muss ich die Animation doch im Canvas definieren? Wäre es auch möglich über RenderTransform das myControl von 0 auf 100% (also auf Width 40) zu skalieren. Also quasi dass die MyControls ins Canvas auf "poppen"?

LG

13.12.2011 - 19:30 Uhr

Hallo,

vlt. ist das http://www.11011.net/wpf-transitions (Wischeffekt wie bei iphone!?) für dich auch intressant .

13.12.2011 - 13:46 Uhr

Hallo,

da ich nicht genau weiß was du vor hast hier noch folgendes als Ergänzung. In WPF gibt es Custom Controls und User Controls.

-UserControls soll man verwenden wenn man mehrere Control zu einem Control gruppieren möchte, um Komplexität zu kapseln, oder um die gruppierten Controls auf an mehreren Stellen wieder zu verwenden.
-keine Visuelle Anpassung benötigt wird

Custom Controls unterstützen Templates und Themes.

Hier ein Beispiel:
Wir möchten ein Control erstellen das eine Uhr darstellt. -> Custom Control.
Wir brauchen ein Control das aus TextBlock und TextBox besteht ->UserControl.

Wenn du ein BaseControl erstellst welches von UserControl erbt, und ein ExtendedControl das wiederum von BaseControl erbt, erbst du nur die in der Klasse definierten Funktionalitäten (Also keine Visuellen Eigenschaften).

Im ExtentdedControl must du im XAML auf die Propertie von BaseControl binden. Dann sollte das gehen.

13.12.2011 - 12:08 Uhr

Probier mal beim Binding IsAsync=True anzugeben. Dann kannst du noch VirtualizingStackPanel.IsVirtualizing="True" aktivieren.

VirtualizingStackPanel Class

13.12.2011 - 11:44 Uhr

Probier mal das hier:


namespace Testprojekt
{
    public class UCBase : UserControl
    {
        public UCBase():base()
        {

        }
static UCBase()
{
BackgroundProperty.OverrideMetadata(typeof(UCBase ), new FrameworkPropertyMetadata(Brushes.Blue));

}
    }
}

Im UserControl must du jetzt auf die Background Property Binden. Z.B. so


<myTypes:UCBase x:Class="Testprojekt.UCInherit"
              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
              xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
              mc:Ignorable="d"
              d:DesignHeight="284" d:DesignWidth="338"
              xmlns:myTypes="clr-namespace:Testprojekt">
<myTypes:UCBase.Content>
     <Grid Background=="{Binding Path=Background,
	            RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type local:UCInherit}}}" >
 
    </Grid></myTypes:UCBase.Content>
 </myTypes:UCBase>

12.12.2011 - 22:15 Uhr

Hallo,

danke für den Tipp. Damit hats geklappt. Hier meine Lösung:

            Thread thread = new Thread(new ParameterizedThreadStart(delegate(object arr) { GetAllV((Vertex)(arr), null); }));
            thread.Start(graph.Vertices.First());

        }
        ManualResetEvent mre = new ManualResetEvent(false);
        public void GetAllV(Vertex v, Vertex firstVertex) //als bsp alle vertices mal durchlaufen
        {
            if (v == firstVertex) return;
            if (firstVertex == null) firstVertex = v;

            _GraphVisualization.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, new Action(
              delegate()
              {
                  _GraphVisualization.setFocus(v);
              }));
            mre.WaitOne(10 * 120);

            foreach (Edge e in v.Edges)
            {
                GetAllV(e.V, firstVertex);
                return; //weil z.b Vertex 3 -> 4 und 3->4 verbunden sein kann
            }

        }

Ich werd noch schauen, dass ich

_GraphVisualization.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, new Action(
              delegate()
              {
                  _GraphVisualization.setFocus(v);
              }));

das irgendwie auslagern kann, damit es etwas schöner aussieht.

11.12.2011 - 16:17 Uhr

Also angenommen ich will den Algo. DFS (Depth-first search) visualsieren)

Die Methode von DFS sieht dann in etwa so aus.

  procedure DFS(G,v):
2      label v as explored
3      for all edges e in G.incidentEdges(v) do
4          if edge e is unexplored then
5              w  G.opposite(v,e)
6              if vertex w is unexplored then
7                  label e as a discovery edge
8                  recursively call DFS(G,w)
9          else 
10             label e as a back edge

Jetzt muss ich irgendwie zeigen, dass der Algorithmus gerade bei Vertex x bzw. Edge y ist. Also setze ich den Focus im DFS Algo. (grob das man ca. weiß was ich meine)

 procedure DFS(G,v):
     label v as explored
     for all edges e in G.incidentEdges(v) do
         [COLOR]_graphcontrol.setFocus(edge);
[/color]
         if edge e is unexplored then
             w ? G.opposite(v,e)
             if vertex w is unexplored then
                [COLOR]_graphcontrol.setFocus(vertex );
[/color]
                 label e as a discovery edge
                 recursively call DFS(G,w)
         else 
             label e as a back edge

Nun das Problem ist wie gesagt, dass der Algo. viel zu schnell abgearbeitet wird. Nur wie kann ich hier den DispatcherTimer verwenden?

Als einzige Lösung fällt mir ein, dass ich zum DFS algo. Flags einbauen, damit der Dispatcher weiß, wo er bereits war, und wo er weiter machen muss. Das ganze wird aber somit unglaublich umständlich und komplex. Hat jemand vlt. eine Idee wie das ganze einfacher gehen würde?

09.12.2011 - 23:49 Uhr

@Briefkasten,
wenn du die Controls im Abstand von .9 Sekunden fokusieren möchtest, schiebe alles zusammen in einen DispatcherTimer, der dir alle .9 Sekunden eine Aktion ausführt. Dort in dieser Aktion kannst du deine Controls fokusieren und machen was du willst, da die Aktion immer im GUI-Thread ausgeführt wird

Gruß
Michael

Hallo,

vielen Dank! Das war die Lösung.

Hier noch ein Bsp http://wangmo.wordpress.com/2007/09/07/dispatchertimer-in-wpf/

Hier noch der Code:

            //count all VertexControls
            int counter = _GraphVisualization.VertexVisualizationList.Count;

            timer.Interval = TimeSpan.FromMilliseconds((9 * 120));
            //iterate from behind and save iteration position so that only one control in the eventhandler will be set IsFocused=true
            timer.Tick += new EventHandler(new EventHandler(delegate
            {
                if (counter == -1) this.timer.Stop();
                for (int i = counter; i > 0; i--)
                {
                    Vertex v = _GraphVisualization.VertexVisualizationList[i - 1].Vertex;

                    _GraphVisualization.setFocus(v);
                    counter--;
                    return;

                }
            }));
            timer.Start();