Mit MVVM habe ich überhaupt noch nicht gearbeitet. Da muss ich mich erstmal einlesen. Auch die Doku zu "Observable Collection" muss ich jetzt mal lesen.
Wenn sich dabei Fragen in Bezug auf mein "Verbesserungsproblem" ergeben, melde ich mich.
Falls aber noch jemand eine weitere Idee oder Vorschlag: Immer her damit. Ist ja immer gut auch mal mehr als einen Weg zu kennen.
Eins vorweg: Habe bis jetzt immer mit WindowsForms gearbeitet, daher bin ich noch sehr unerfahren mit WPF.
Durch Recherche habe ich es jetzt hinbekommen ein DataGrid zellenweise auszulesen und zeilenweise zu befüllen. Jetzt wollte ich schauen wie ich eine Zelle per "CodeBehind" ändern kann. Beim DataGridView bei WindowsForms geht das recht einfach. Hier greife ich wie bei einem Array auf Zeilen, Spalten und Zellen zu. Bei WCF habe ich bis jetzt nur folgende umständliche Methode gefunden. Die funktioniert, aber: Geht das auch einfacher?
Hier ein Beispiel bei dem der Saldo für einen Kunden aktualisieren wird. Der Einfachheit halber besteht die Tabelle jetzt nur aus 2 Spalten. In Wirklichkeit ist das natürlich vollkommen anders. Soll ja nur ein Beispiel sein. In der XAML-Datei ist das Bindung auch entsprechend : Binding="{Binding Path=Kunde}" und Binding="{Binding Path=Saldo}"
public void SaldoAnpassen()
{
DataGridRow DGR = (DataGridRow)DG.ItemContainerGenerator.ContainerFromIndex(0);
DataGridCell RowColumn = DG.Columns[0].GetCellContent(DGR).Parent as DataGridCell;
String Firmenkunde = ((TextBlock)RowColumn.Content).Text;
var data = new TabellenStruktur { Kunde = Firmenkunde , Saldo = "Mein neuer Saldo" };
MeinDataGrid.Items[0] = data;
}
public class TabellenStruktur
{
public Kunde {get; set;}
public Saldo {get; set;}
}
verwendetes Datenbanksystem: MS SQL Server 2008 R2
Hi!
Vielleicht habe ich die falschen Begriffe verwendet, aber mein Problem konnte ich hier noch nicht finden.
Mein Problem:
Im SQL Server habe ich ein "View" auf meine Daten erstellt. Mache ich auf den "View" eine SQL Abfrage im SQL Management Studio hab ich das Ergebnis (ca. 1.000 bis 5.000 Datensätze) in unter 1 Sekunde.
In meinem Programm greife ich per DataAdapter auf diesen "View" zu und es dauert teilweise 1 Minute.
Liegt das an dem "View"? Ich greife nämlich auch "direkt" auf eine Tabelle und zieh mir da in mein Programm auch über 50.000 Daten innerhalb von ein paar Sekunden.
Ja. Hier mal der stark vereinfachte Quellcode. Habs mal auf das Problem runtergebrochen.
public abstract class A {
public virtual List<String> A1 ()
{
String a = this.A2();
return liste;
}
protected virtual String A2 ()
{
return null;
}
}
public class B : A
{
protected new String A2()
{
return "Wert mit Sinngehalt";
}
}
Ich habe eine Detailfrage zum Thema Vererbung und konnte keine Antwort darauf finden. Folgendes, vereinfachte Szenario besteht:
Klasse A ist abstrakt und beinhaltet 2 Methoden mit Namen A1 und A2;
Methode A1 ruft u.a. Methode A2 auf.
Klasse B erbt von Klasse A.
Methode A2 wird überschrieben. Zur besseren Unterscheidbarkeit nenne ich diese Methode B2 in meinem weiteren Text (im Quellcode natürlich gleicher Name!). A1 wird nicht überschrieben.
Wenn ich jetzt ein Objekt der Klasse B erstelle und die Methode A1 aufrufe, wird nicht die Methode B2, sondern A2 benutzt. Es wäre aber schön, wenn es so wäre, da es mir Arbeit ersparen würde. In Methode A1 werden nämlich allgemeine Berechnungen durchgeführt. Wenn sich da was ändern, müsste ich das auf jeden Fall bei allen Unterklassen ändern. Daher auch die Vererbung, um den Aufwand gering zu halten.
Kann man das gewünschte Verhalten erzwingen oder gibt es da eine Alternative? Denke vielleicht komplett in die falsche Richtung?
Ich habe jetzt mal einfach durchprobiert. Weil die Einstellungen unter "Seite einrichten" des reportviewer ja auch irgendwas was mit drucken zu tun haben ;-) , habe ich da mal statt DINA4 DINA3 eingestellt und plötzlich klappt es.
Also muss ich wohl irgendeine Größengrenze überschreiten, so dass meine Ausgabe des reportviewer nicht auf ein DINA4 passt. Passt ja voll zur Fehlermeldung ;-)
Was aber dann doch blöd ist, dass wenn ich das kleiner mache und auf DINA4 passt, es dann aber bei DINA5 wieder nicht passt und ich die Fehlermeldung erhalte.
Gibts da ggf. ein Ereignis bei ich prüfen kann, ob das passt und den Nutzer dann darauf hinweisen kann?
P.S. Bin heute viel unterwegs; ggf. hört man sich erst morgen.
In meinem Programm habe einen reportviewer. Das läuft auch alles. Außer wenn ich in der Symbolleiste des reportviewer auf Seitenlayout klicke. Dann kommt die Fehlermeldung:
Fehler
Fehler in der lokalen Berichterstattung. Ungültiger Parameter
Ich arbeite zwar mit Parametern, aber ich habe alle korrekt übergeben. Sonst würde meine Legende in der Normalansicht auch nicht korrekt dargestellt werden. Drucken funktioniert.
Ich habe echt keinen Plan wo ich nach dem Fehler suchen soll. Wenn ich die Meldung hier in die Forensuche eingebe, finde ich viele Sachen, aber aus anderen Bereichen.
Hätte jemand da einen Tipp für mich? Allein die Richtung in die ich suchen müßte, würde mir schon helfen. Danke schonmal.
Ich bin jetzt an dem Punkt, wo ich mir halt nicht sicher bin, ob es die Eigenschaft bei der Version nicht gibt oder ich den Menüpunkt nicht finde, weil ich den Wald vor lauter Bäumen nicht sehe. Es gab halt ziemlich viel auszuprobieren. :-)
Ich werde weitersuchen und vielleicht hat jemand hier ja doch noch ne Antwort. Hab jetzt noch den MS Search Server Express draufgeknallt. Mal sehen was man da so machen kann und ob es mir was bringt.
Also nochmal danke!
[Edit]
Ich konnte das Problem etwas eingrenzen. Direkt unter meiner Bibliothek "Dateien" klappt die Volltextsuche. Aber alle Dokumente in Ordnerordnern werden nicht durchsucht. Wo kann man das einstellen? Wäre für jeden Hinweis dankbar!
[Edit 2]
Hatte alles neu aufgesetzt und mehrere Word-Dateien eingepflegt. Volltextsuche ging. Nach dem Bearbeiten einzelner Word-Dateien sind diese nicht mehr durch die Suche zu finden. Das kann ich auch reproduzieren. Im Protokoll steht zu diesen Dokumenten "Vom Gatherer gelöscht". Keine Ahnung warum und wie man das verhindern kann. Wäre immernoch für jeden Hinweis dankbar.
hat jemand von euch mal den MS SharePoint 2010 Foundation getestet und weiß ob es da eine Volltextsuche gibt? Oder gibts das erst ab MS SharePoint 2010 Standard?
Bin den gerade am Austesten. Trotz Indizierung werden zwar Dateinamen, aber nicht der Inhalt von bspw. Word-Dokumenten gefunden. Bei google find ich auch nix.
Wäre duffte, wenn das jemand wüßte. Danke schonmal!
zu 2.) Da musst du nichts umstellen, wollte nur wissen, ob es daran liegt. Die Herausforderung dabei ist, dass diese Dialoge zur Laufzeit erstellt werden, da muss ich mal schauen, wie ich das mit in die Größenberechnung einbauen kann.
zu 2.)
Ich habe gerade mal nachgesehen und ich hab die Textgröße wie es bei Windows 7 heißt auf 125%. Habe auf meinem Notebook eine recht hohre Auflösung und da sind mir die Zeichen zu klein. Aber für mich als Anwender wärs ja recht umständlich für ein Programm immer das umzustellen.
1. Unterstützung für MS SQL Compact wäre klasse und mir sehr wichtig.
2. Wie im Anhang zu sehen, passen die Dialogboxen bei mir nicht. Die Buttons sind etwas verdeckt. Ist aber bei allen Dialogen so. Der Anhang soll nur als Beispiel dienen.
3. Wollte eine Access-Datenbank öffnen und ein Ausnahmefehler kam. Ich hab Access 2007 installiert. Fehlt mir da noch was:
Fehler
System.InvalidOperationException: Der 'Microsoft.Jet.OLEDB.4.0'-Provider ist nicht auf dem lokalen Computer registriert.
bei System.Data.OleDb.OleDbServicesWrapper.GetDataSource(OleDbConnectionString constr, DataSourceWrapper& datasrcWrapper)
bei System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection)
bei System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
bei System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup)
bei System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
bei System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
bei System.Data.OleDb.OleDbConnection.Open()
bei TD.Additional.Data.MSOffice.Access.AccessDataSourceAdapter.LoadFile(String fileName)
bei TD.Additional.Data.MSOffice.Access.AccessDataSourceAdapter.GetTableNames()
bei TD.Additional.Data.File.FileDataSource.GetTableNames()
bei DatabaseExplorer.MainForm.treeViewDataSources_BeforeExpand(Object sender, TreeViewCancelEventArgs e)
bei TD.Additional.UI.WinForms.Controls.LoadOnDemandTreeView.OnBeforeExpand(TreeViewCancelEventArgs e)
bei System.Windows.Forms.TreeView.TvnExpanding(NMTREEVIEW* nmtv)
bei System.Windows.Forms.TreeView.WmNotify(Message& m)
bei System.Windows.Forms.TreeView.WndProc(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
den Database-Explorer find ich auch ganz interessant. Ich muß gestehen, dass ich die meisten Posts nur überflogen habe. Ich wollte dein Projekt lieber erst direkt testen. Allerdings schaffe ich es nicht die zip-Datei zu öffnen. Sowohl 7zip als auch das Windows-eigene zip-Programm hauen mir Fehlermeldungen um die Ohren.
Wenn du das beheben könnte, wäre das klasse. Ich werd dann auch sofort testen. Danke!
bin für mein nächstes Projekt dabei mich mit dem ReportViewer auseinanderzusetzen. Mit sehr hoher Wahrscheinlichkeit werde ich auch die Diagrammkomponente benötigen. Daher befasse ich mich verstärkt damit. Wie dem Screenshot zu entnehmen ist klappt das auch ganz gut. Nur eine Sache bekomme ich nicht hin. In meiner Quelltabelle habe ich einen negativen Wert (-175 / Monat März). Dieser wird im Diagramm aber als positiver Wert dargestellt. Aus der Quelltabelle wird er auch in das DataSet bzw. in die DataTable des DataSets richtig geladen.
Muss man da irgendwo noch was beim Diagramm einstellen? Leider habe ich im Forum zwar zum ReportViewer einiges gefunden, aber nicht zu meinem spezifischen Problem.
ich bin jetzt mal hingegeangen und habe versucht alle Menüs zu deaktivieren:
foreach (Office.CommandBar cbar in word.CommandBars)
{
cbar.Visible = false;
}
Nur bekomme ich dann den Fehler:
Beim Aufruf einer COM-Komponente wurde ein HRESULT E_FAIL-Fehler zurückgegeben.
Und wenn ich statt visible, enable nehme tut sich nix. Oder beziehen sich die CommandBar-Eigenschaft auf Office bis 2003 und die Office-Varianten 2007 und 2010 muss man über eine andere Eigenschaft ansprechen? Ich benutz doch wahrscheinlich nur die falsche Variable, oder? Allerdings hab ich immer noch keine Alternative gefunden. Hast du da ne Idee?
Ich bin mir nicht sicher warum, aber es funzt. Hab mich an das was iced-t89 gesagt hat gehalten, aber durch das ganze rumprobiere habe ich etwas den Überblick verloren. Ob das nur ein dummer Fehler meinerseits war oder ich die Sache wirklich ganz falsch angegangen bin. Keine Ahnung! Ich mach jetzt erstmal ne dickere Pause, um wieder klar denken zu können und dann schau ich mir das nochmal an. Vielleicht seh ich dann warum es jetzt läuft. Ich hoffe es kommt nicht allzu peinliches dabei raus.
Hab schon hier im Forum und im Netz gesucht, aber hab für mein Problem noch keine Lösung. Problem ist folgendes:
Mit Hilfe der Krypton Suite habe ich mir ein Ribbon und einen sogenannten DockableWorspace gebastelt, auf dem dann meine Unterfenster zu sehen sind. In einem Unterfenster habe ich Word eingefangen und kann auch ohne Probleme darauf zugreifen.
Problem ist aber, dass wenn ich bspw. über mein Ribbon-Menü sage er möge einen Bereich im Word-Dokument markieren, er dies tut, aber er zeigt es nicht an. Erst wenn ich das Unterfenster explizit mit der Maus anklicke.
Von Focus() über BringToFront(), Select() hab ich zig Sachen und Varianten ausprobiert. Er aktualisiert einfach mein Unterfenster nicht.
Was kann ich denn noch machen? Gibts da vielleicht ganz einfach nen Trick, um diesen Mausklick zu simulieren? Ich bin wirklich verzweifelt. Die Lösung muss jetzt auch nicht mehr schön sein, sondern nur funktionieren. Alles andere ist mir zur Zeit egal!
Lässt du das Projekt komplett sterben oder darf man den Code jetzt auch abändern?
Wie in schon in einem anderen Beitrag geschrieben, fand ich dein Projekt auch immer schon klasse. Deine Beweggründe kann ich ebenfalls nachvollziehen.
Trotzdem fände ich es sehr schade, wenn das Projekt einfach so sterben würde. Daher würd ich mich gern der Frage anschließen, ob du den Code jetzt freigibst. Ich selber würd mich gern dem Darstellungsproblem auf meinem Notebook annehmen. Vielleicht krieg ich da was hin.
Trotzalledem vielen Dank für die geleistete Arbeit und ich hoffe du gibst den Quellcode frei.
Ich schätze du hast die dpi-Zahl verändert oder? Bzw. Schriftgröße auf "groß" geändert.
Tut mir leid, dass ich so lange gebraucht habe. Hatte ne Menge um die Ohren. Die Schriftgröße hab ich nicht geändert. Schriftgrad: "Normal" steht bei mir. Meine Auflösung ist 1920x1200 Pixel.
P.S. Hab gerade vom AppDater ein Update gefahren. Bei vielen Dialogen hab ich nicht alles gesehen. Als Beispiel häng ich mal den letzten Dialog an.
Erstmal wollte ich sagen, dass das eine großartige Erweiterung für jede Anwendung ist. Hab auch noch zwei kleine Fehler entdeckt. Wie auf dem Bild zu sehen, hab ich mit meinem Breitbild-Notebook-Monitor ein kleines Problem. Etwas ähnliches hab ich hier schon aber an anderer Stelle gelesen. [Edit] Hab jetzt mal weitere Dialoge getestet. Bspw. "Über AppDater". Meist sind bei mir die Buttons wie "OK" fast nicht zu sehen. Mit ein wenig Glück treff ich die nur.
Außerdem tritt eine Ausnahme auf, wenn man aus versehen direkt auf "Übernehmen" klickt.
Das sind jetzt nur Kleinigkeiten, aber ich wollts nur mal kurz gesagt haben.
Dann wollte ich fragen wann das Codebeispiel im Wiki von K_Updater auf AppUpdater umgestellt wird.
zu 2) [...] Ein Singelton ist viel besser (habe ich gelernt), da man hier noch alle Vorteile von Objektorientierung hat. Im Zweifelsfall ist aber auch vom Singelton noch abzuraten.
Hab da auch noch ne Verständnisfrage. Ein "Singelton" ist was? Eine "einelementige Menge" vielleicht? Muss gestehen, dass ich den Begriff noch nicht gehört habe, aber wahrscheinlich sagt mir die deutsche Bezeichnung was. Nur wie ist die?