Laden...
Avatar #avatar-2980.jpg
Taladan myCSharp.de - Member
Individualprogrammierer sowie Student Osnabrück Dabei seit 06.04.2008 582 Beiträge

Forenbeiträge von Taladan Ingesamt 582 Beiträge

06.11.2008 - 12:34 Uhr

Scheinbar ist das DataGrid kein bestandteil des ServicePacks. Ich habe selbst bei einer Neuistallation selbiges Grid nicht in der ToolBox (und auch nicht auswählbar).

Das DataGrid, die RibbonBar und der DateTimePicker ist bestandteil des WPF-Toolkits, welches wiederum .Net 3.5 SP1 benötigt. Daher könnte es wohl zu den Verwechslungen kommen. In der neuen .Net 4.0 (geplant Ende 2009) werden diese drei Komponenten offiziell mit dabei sein. Das Toolkit findest du hier. Beachte das du für einige Komponenten zur Zeit noch seperate Lizenzen anfordern mußt (RibbonBar). Diese scheinen aber kostenlos zu sein.

Aber Achtung. Obwohl es StableVersionen sind, haben die immer noch massiv Bugs.

06.11.2008 - 12:19 Uhr

bin ganz deiner Meinung. Die Gridlines sind übrigens NICHT veränderbar. Ich stehe momentan vor den gleichen Problem.

Aktuell habe ich zwei Lösungsansätze. Entweder ein eigenes Grid über ein Canvas-Panel erstellen oder in jeder Zelle ein Border plazieren. Letzteres hat nur den Nachteil, das es kein Event gibt, welches auf ein dynamisches Verhalten der Columns/Rows reagiert. Solange du eine feste Zeilenanzahl hast, kannst du das gut mit Borders machen. An sonsten stehts du vor einem dicken Problem.

06.11.2008 - 12:15 Uhr

Hier findest du ein Value Converter von mir


public class DoubleToIntegerConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return (int)(double)value;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            int result = 0;
            if (int.TryParse((string)value, out result))
                return result;
            else return 0;
        }
    }

Da im Standart-Konstrukter man Parameter übergeben kann, beantworte ich das mal pauschal mit ja. Aber wie man das macht, kann ich dir nicht sagen, da ich das bisher nicht benötigt habe. Wäre aber nett, wenn du deine Erkenntnisse hier später publizieren würdest 🙂

05.11.2008 - 12:43 Uhr

@mrdjoker:

Property-Grid und DataGridView (DataGrid) sind Elemente von Windows Forms und damit biste hier falsch. Hier wird über WPF und Silverlight (der kleine Bruder von WPF) gesprochen. Beide Elemente gibt es (noch) nicht in WPF. Man muß sie sich umständlich selbst erstellen.

@MichiG:
Das Grid besitzt über "ShowGridLines=true" die Möglichkeit , sich die GridLines anzeigen zu lassen. Auch wenn es überhaupt nicht richtig ist, erklär ich es am besten dadurch, wenn ich sage, das ich ein Spielfeld, Schachbrett, Dame und Co erstellen möchte. Also was in X und Y Richtung gleich groß, Scalierbar, und bewegen von Objekten ermöglicht.

Akutell habe ich alles schon realisiert, aber ohne Gridlines sieht das nicht schön aus. Und ist bei kleinen Elementen sehr ungenau 😦. Daher nutze ich die Gridlines zur Orientierung. Die sind aber denkbar häßlich.

05.11.2008 - 12:35 Uhr

Die lösung ist relativ einfach. Man muß den Hintergrund des Grids einen Wert zu ordnen und schon empfängt das Grid den MouseDown-Befehl

04.11.2008 - 19:20 Uhr

Wie kann man in einen Grid die Gridlines verändern? Also Farbe und Co.

04.11.2008 - 19:19 Uhr

Es gibt in WPF kein DataGridView. Momentan berechne ich noch die Zelle manuell.

04.11.2008 - 17:20 Uhr

Wie kann man bei einen Grid abfragen, auf welche Zelle geclickt wurde?

29.10.2008 - 17:58 Uhr

Ich möchte gern eine Art Spielfeld erstellen.

Ziel soll eine Feld mit quadratischen Feldern, worauf später Elemente Hin und her geschoben werden. Die Felder werden teilweise neben diesen Elementen noch andere Dinge (Labels) usw angezeigt werden.

Mein Problem ist wie ich das Feld darstellen soll.

Es sollte

  1. Zoombar sein/werden,
  2. Jederzeit in jede Richtung erweiterbar sein (x und y)
12.10.2008 - 02:34 Uhr

Hallo,

ich habe eine Klasse namens Item. Diese ist sehr mächtig, mehrere 1000 Zeilen Code. Dieses Item hat ein paar Methoden die ich überschreiben will. Wichtig ist mir, das ich keine Ableitung machen muß, sondern die Basis verändert wird. Und zwar aus einer anderen Datei. Ist das überhaupt möglich?

PS: Wie man Methoden überschreibt bei abgeleiteten Klassen ist mir schon klar, aber wie man die basis verändert nicht.

30.09.2008 - 14:34 Uhr

Wie kann ich die FindTextbox des FlowdocumentReaders aktivieren? Ich kann die aus irgend einen grund nicht anwählen

30.09.2008 - 13:32 Uhr

<scr:MeinControl x:Class="abc.UserControl1"
    xmlns:scr="clr-namespace:abc"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Width="300" Height="300" 
>
    <Grid>

  </Grid>
</scr:MeinControl>

So sollte der XML Code aussehen

30.09.2008 - 02:02 Uhr

Danke für die schnelle Antwort.

Ich glaube ich habe mein Problem zu ungenau geschildert.

Deshalb Ergänzung:
Das Tabcontrol ist nur für die Navigation gedacht - d.h. Tab1 heißt zB Benutzer - in diesem TabItemContent befinden sich dann Buttons mit Icon-Funktion, sprich Bildbuttons (diese stehen für bestimmte Aktionen, wie Benutzer hinzufügen, löschen, usw.)
Wenn man einen dieser Button betätigt, sollten sich zwei Bereiche ändern.

  1. Der Unternavigationsbereich - dieser beinhält Unterpunkte der Navigation
  2. Der Hauptbereich - in diesem werden hauptsächlich Formulare dargestellt, aber nicht ausschließlich

Nun möchte ich wissen wie ich das bewerkstellige, das ich in diese zwei Bereiche einfach Pages (oder falls es andere Möglichkeiten gibt, diese) hineinlade (zur Laufzeit).

Freue mich schon auf Umsetzungsvorschläge.

Danke für eure Hilfe. =)

Also ich hoffe ich habe es richtig verstanden.

Aus einer Page heraus kann man sehr leicht navigieren. Dies geht allerdings nur auf das Elternelement


ContentFrame.Navigate(new Uri("Pages/Page2.xaml", UriKind.Relative)); 

Von Window/Page wo das Frame ein Kindelement ist, kann man natürlich per Name auf das Element zu greifen.

Trotz allen überleg mal, ob du deine Navigation nicht zu umständlich machst. Und das mächtige TabControl zweck entfremdest. Ein menu dieser Art kannst du besser, indivueller und vor allem Res-schonender anders bewerkstelligen.
Beispiel 1: Menus mit Submenus wären eine Lösung.
Beispiel 2: Ein Stackpanel mit Buttons drauf (Buttons können auch ein Kontextmenu/Submenu haben)

Dann plazierst du ein Frame darunter. Dieses lädt dann deine Seiten. Die können dann wahlweise deine "untermenus" darstellen oder den eigendlichen Content.

Und ich stimme MichilG zu. Änderst du nur kleinigkeiten, bastle dafür nicht gleich jeweils eine eigene Page. WPF ist sehr Dynamisch und passt sich gut an. Durch ein Visibile=False auf ein Elternelement kann schon viel ausmachen. Und WPF passt das Layout (entsprechende Container vorrausgesetzt) dynamisch an.

Wenn wir Beide daran vorbei geredet haben, versuche es deutlicher zu erklären oder du zeichnest auf was du willst.

Wenn du deine Subbereiche extra haben willst, also in einer eigenen Page

30.09.2008 - 01:41 Uhr

Hallo Martin123,

sowas gab es hier schon mal:
>>

Du musst aber aufpassen fallst du ein Container-Control ableitest, weil dann kann man dem Containercontrol keine Controls mit Namen hinzufügen.
D.h. Wenn du z.B. ein Grid ableitest, dann kannst du in diesem grid kein Control hinzufügen das mit x:Name einen Namen hat.

Gruss
Michael

Ich hab jetzt alle Varianten, die im Link vorkommen, ausprobiert. Er gibt mir immer einen Fehler aus. z.B. das Tag <Controlname> ist im Namespace .... nicht vorhanden.
Könntest du mir noch etwas weiter helfen?

Eventuell der typische Einsteigerfehler? Namespace nicht mit angegeben?


<window [...]
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     xmlns:c="clr-namespace:Tools.Klassen.Converter"
      xmlns:k="clr-namespace:Komponenten;assembly=Komponenten"
</window>

Neben den Standartangaben werden hier noch meine Namespace´s Tools.Klassen.Converter instanziert, sowie aus einen anderen Projekt der Namespace Komponenten aus dem Assembly Komponenten.
Nun kann ich über c:MeinConverter auf die Konverter zu greifen und über k:TollesTool auf meine Kompenten. eine Schreibweise MeinConverter bzw TollesTool würde hier nicht funktionieren. Statt einen einzelnen Buchstaben kannst du auch zusammenhängendes Wort verwenden.
Wenn dir IntelliSence nicht die Möglichkeit gibt, die Komponente aus zu wählen. Dann hast du sie entweder den Namespace nicht mit angegeben oder gar keinen Verweis im Projekt (wenn du auf ein anderes Projekt verweisen mußt).

Und achte darauf das du den richtigen Namespace instanzierst 😉.

30.09.2008 - 01:31 Uhr

Hab leider nur den link zur englischen Doku aber die hilft evtl auch weiter.

RTB mit Routet Events

30.09.2008 - 01:29 Uhr

Hallo,
ich würde gerne ein FlowDocument zwei Controls zu weisen.

Erst einen normalen FlowDocumentReader und einer RichTextBox. Und zwar soll es das selbe Document sein, was dann entsprechend der Eigenschaften entweder nur angezeigt oder auch bearbeitbar sein soll. Leider finde ich keine möglichkeit dazu.

28.09.2008 - 22:17 Uhr

Wo finde ich dazu Infos? Die neueren Word-Dokumente sind ja als XML gespeichert. Sollte somit ja eigendlich (prinzipiell) bereits RTB Kompatibel sein, oder nicht?

27.09.2008 - 01:35 Uhr

Hallo,

ich habe einen Codebaustein den ich sehr häufig in Classen wiederverwenden werde. Dafür sind ja interfaces gedacht, doch diese dürfen nicht mit Felder erstellt werden. Nun weiß ich allerdings nicht, wie ich die dann erstellen muß.

In diesen Fall möchte ich verschiedenen Gebäudetypen die Preisschnittstelle hinzufügen z.B. der Schmiede, der Schänke, der Taverne oder dem Gasthaus. Alle leiten sich der abstrakten Klasse BasisGebauede ab. Ebenfalls leiten sich Privathaus, Wohngebäude, Wachturm, Stadttor und Tempel davon ab. Da hier aber nichts verkauft wird, soll die Schnittstelle Preis erst gar nicht implementiert werden.

Hier mein Interfacemodel was ich gerne nutzen würde:


interface IPreis
    {
        private int preis;

        public int Preis
        {
            get { 
                return this.preis; 
            }
            set { 
                this.preis = Preis;
                switch (Preis)
                {
                    case 1, 2:
                        preisklasse = "sehr billig";
                        preisniveau = 70;
                        break;
                    case 3,4,5:
                        preisklasse = "billig";
                        preisniveau = 85;
                        break;
                    case 14,15,16,17:
                        preisklasse = "teuer";
                        preisniveau = 120;
                        break;
                    case 18,19:
                        preisklasse = "sehr teuer";
                        preisniveau = 150;
                        break;
                    case 20:
                        preisklasse = "Wucher";
                        preisniveau = 200;
                        break;
                    default:
                        preisklasse = "durchschnittlich";
                        preisniveau= 100;
                        break;
                }
            }
        }

        private string preisklasse;
        public string PreisKlasse
        {
            get { return this.preisklasse; }
            set { this.preisklasse = PreisKlasse; }
        }

        private int preisniveau;
        public int Preisniveau
        {
            get { 
                return this.preisniveau; 
            }
            set { 
                this.preisniveau = Preisniveau;
                if (Helper.between(Preisniveau, 0, 70)) { this.preisklasse = "sehr billig", this.preis = 2};
                else if (Helper.between(Preisniveau, 71, 99)) { this.preisklasse = "billig", this.preis = 5};
                else if (Helper.between(Preisniveau, 100, 119)) { this.preisklasse = "durchschnittlich", this.preis = 13};
                else if (Helper.between(Preisniveau, 120, 149)) { this.preisklasse = "teuer", this.preis = 17};
                else if (Helper.between(Preisniveau, 150, 199)) { this.preisklasse = "sehr teuer", this.preis = 19};
                else if (Preisniveau > 200) { this.preisklasse = "Wucher", this.preis = 20};
            }
        }

        public void randomPreis()
        {
            Preis = Wuerfeln.W20;
        }

    }

22.09.2008 - 23:06 Uhr

Hallo,

wie kann man in einen FlowDocument die Absätze zwischen einzelnen Blocks verringern?

19.09.2008 - 21:02 Uhr

Hallo, ich würde gerne einen Rahmen zeichen mit eingeknickten Ecken. (wie in meinen Anhang, nur hübscher 😉 ). Abgerundete Ecken finde ich überall, aber wie kann man diese ecken nicht außen sondern nach innen gekehrt abrunden. Oder wie kann ich das überhaupt bewerkstelligen.

Hatte schon ähnlich HTML Technik an ein 3x3 Grid gedacht und Linien zu verwenden, doch scheitere ich daran, die Linien in einen Bogen zeichnen zu lassen.

19.09.2008 - 14:05 Uhr

Ich habe leider nie mit Silverlight gearbeitet.

19.09.2008 - 02:24 Uhr

Hallo, ich probiere mich gerade mit TabItems/TabPanel rum. Nu will ich ich den TabHeader größer machen wenn dieser Selektiert ist. Aber irgendwie werden immer alle größer dar gestellt. und dann am besten noch unten oder oben an einer linie ausgerichtet (nicht mittig).

    <Style TargetType="{x:Type TabItem}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type TabItem}">
                    <Grid>
                        <Border 
                            Name="Border"
                            Margin="0,0,-4,0" 
                            Background="{StaticResource LightBrush}"
                            BorderBrush="{StaticResource SolidBorderBrush}" 
                            BorderThickness="1,1,1,1" 
                            CornerRadius="2,12,0,0" >
                            <ContentPresenter x:Name="ContentSite"
                              VerticalAlignment="Center"
                              HorizontalAlignment="Center"
                              ContentSource="Header"
                              Margin="12,2,12,2"
                              RecognizesAccessKey="True"/>
                        </Border>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsSelected" Value="True">
                            <Setter Property="Panel.ZIndex" Value="200" />
                            <Setter TargetName="Border" Property="Background" Value="{StaticResource WindowBackgroundBrush}" />
                            <Setter TargetName="Border" Property="BorderThickness" Value="1,1,1,0" />
                            <Setter TargetName="Border" Property="Height" Value="48" />
                            <Setter TargetName="ContentSite" Property="Height" Value="100" />
                        </Trigger>
                        <Trigger Property="IsEnabled" Value="False">
                            <Setter TargetName="Border" Property="Background" Value="{StaticResource DisabledBackgroundBrush}" />
                            <Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource DisabledBorderBrush}" />
                            <Setter TargetName="Border" Property="Height" Value="22" />
                            <Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush}" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

17.09.2008 - 18:14 Uhr

Hab schon alle Probiert, aber irgendwie wird das dann entweder gar nicht oder seltsam angezeigt.

17.09.2008 - 15:02 Uhr

Die einfachste Variante ist, das du für deine XML ein DataSet anlegst und genau mit diesen DataSet arbeitest. Das Dataset übernimmt dann das schreiben und lesen der XML.

15.09.2008 - 22:43 Uhr

Hallo JensW.

Achte bitte beim nächsten Mal ein wenig auf deine Rechtschreibung. Das ist im ersten Moment sehr schwer zu lesen.

Zu deiner Frage. Die Daten kommen aus XML. Soweit klar.
Aber soll es ein Silverlight oder ein WPF Projekt werden?

Bei WPF gibt es dutzende Möglichkeiten XML zu lesen, bearbeiten und speichern. Eines der mächtigsten ist XMLDocument bzw XMLDataDocument (DataSet). Am sichersten ist es eine dieser Varianten zu verwenden.

Alternativ kann man auch XMLReader und XMLWriter verwenden. Hier muß man allerdings den kompletten Serialisierungsprozess selbst verwalten, ist aber deutlich schneller.

Bei XML kannst du immer nur eine ganze Datei schreiben, nicht einzelne Datensätze wie bei Datenbanken. Beim Lesen ist dies begrenzt möglich.

15.09.2008 - 22:25 Uhr

Hallo,

dieses ImageBrush bringt mich an den Rande der Verzweiflung. Ich möchte eine Grafik erzeugen, die als Hintergrund für das Programm dient. Diese Grafik soll jedoch nicht gezogen werden, sondern immer Originalgröße behalten! Sie soll so wie es HTML/CSS macht, einfach nach rechts und unten wiederholt werden. Wenn das Fenster größer gezogen wird, ensprechend mehr Kacheln erzeugen, wenn kleiner die Kacheln entsprechend abgeschnitten.

Irgendwie finde ich da nicht die passenden einstellungen.

14.09.2008 - 21:38 Uhr

Ja danke Resize habe ich nicht beachtet.

14.09.2008 - 21:02 Uhr

Hallo,

ich erstelle gerade ein Designfenster. Mit Windowsstate kann man ja den Rahmen entfernen. Dieser ist zwar schmaler und die Buttons sind weg, aber ich will den Rahmen überhaupt nicht haben.

Wie kann ich den "Restlichen" Rahmen entfernen.

14.09.2008 - 15:11 Uhr

Hallo Schuelerin,

klar ist das möglich. Meine zwei Stammprojete (Bewerbungsmanager in der Beta unter www.taladan.de) zu finden, funktionieren genau so.
Debei ist relativ egal, woher du die Elemente nimmst.

Beide Projekte laufen ähnlich ab.

Navigation:
(einfach) Projekt Bewerbungsmanager: ListView wird über ein Databinding an ein WPF Datei gebunden, woher die URL´s und Titel usw kommen.
(komplex) Projekt Meistertools: Wie Bewerbungsmanger, jedoch verwende ich hier ein TreeView, welches Hiarische Elemente darstellen kann.

Content:
Projekt Bewerbungsmanager: Hier wird ein normales Frame welches in welche dann einzelne Pages geladen werden. (über ein DataBinding an die URL des ListViews gebunden.
Projekt Meistertools: Für jedes Element wird ein neues TabItem erzeugt. Dieses Tabitem beinhaltet dann ein Frame, welches wie im Bewerbungsmanger die URL der Navigation (hier ein TreeView) verwendet.

Aber Achtung. Bei dieser Variante werden Events wie PageLeave oder ähnliches nicht immer ausgelößt. So sollte man sich schon gedanken über die Datenspeicherung machen.

PS: Die ganze Navigation im einfachen Beispiel ist ohne eine Zeile Code machbar, alles per WPF möglich. Beim Komplexbeispiel ist dies nur für die erzeugung der Tabitems und zuordnung der Frames notwendig.

12.09.2008 - 13:49 Uhr

Grad durch Zufall gefunden. Vielleicht hilft dir das ja weiter

http://shevaspace.spaces.live.com/blog/cns!FD9A0F1F8DD06954!472.entry

12.09.2008 - 13:47 Uhr

Hallo,

Wenn ich ein MenuItem den Hintergrund Transparent mit gebe, klappt das wunderbar. Bis ich das Menuitem aufklappe. Dann wird das hübschhässliche Mausgrau angezeigt. Wie kann ich das ändern?

Gruß Tala

10.09.2008 - 22:52 Uhr

WPF weil es nicht weg von den Starren denken wie in Windows Forms weg geht. Wobei man sich ziemlich umstellen muß und einige sachen Fehlen (DateTimePicker), man deutlich anders gewohnt ist (perfomClick()) oder komplett umdenken muss (Styles, Datatemplates, Binding) .

Aber es ist deutlich flexibler. So muß man nicht einze Zeile Code ändern, wenn man mal "nur" das Layout überarbeiten oder komplett verändern will.

10.09.2008 - 22:45 Uhr

Und zwar habe ich einen Button und möchte darauf 1-2 Status LEDs anzeigen, je nachdem an was ich den Button binde, müssen 1 oder 2 Rectangle mit unterschiedlicher Farbe dargestellt werden.

Das Problem das ich eigentlich habe ist, dass ich vorher nicht weiß wie Groß der zugrunde liegende Button ist und wie groß dann die Rectangle sein sollen.

Ich brauche also ein Layout, dass die LEDs an die obere Grenze des Buttons anordnet und wenn es eine LED ist, die volle Breite ausnützt und wenn es zwei sind eben nur die hälfte mit einem Abstand dazwischen. Ich will aber keine Breite für die LEDs angeben müssen.

Dabei habe ich ein paar Probleme. Zum einen schaffe ich es nicht, dass die farbigen Rectangle im Button oben angeordnet sind. Zum anderen gelingt es mir nicht die breite quasi automatisch je nachdem wieviele Status Rectangle vorhanden sind.

Welches Layout muss ich dafür verwenden, oder wie geht es sonst.

Also 1-2 LED´s machste mit einen ContentTemplateSelector wo du per DataTemplateSelector ensprechend deines DataTypes die anzeige bestimmst.

Mach dich bei WPF frei von starren denken eines Layouts. In WPF bestimmen ähnlich der HTML-Technik die Eigenschaften das positionieren der Elemente. Das anordnen oben wäre z.B. so lösbar.


        <Button  Height="80" VerticalContentAlignment="Top" HorizontalContentAlignment="Stretch" >
            <Grid Background="AliceBlue" >
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*" /> // Sternchen ist für die Gewichung des Inhalts. und damit für die Raumverteilung. in diesen falle kannst du es auch weg lassen.
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition Height="12" />
                </Grid.RowDefinitions>
                <Rectangle Grid.Column="0"  Fill="Chartreuse" />
                <Rectangle Grid.Column="1"  Fill="Bisque" ></Rectangle>
            </Grid>
        </Button>


08.09.2008 - 14:46 Uhr

Ok. Dann mußt du tatsächlich eine Sortierung der Listbox machen.


lbElemente.Items.SortDescriptions.Add(new SortDescription("ObjectIndex", ListSortDirection.Ascending));
08.09.2008 - 13:04 Uhr

Ok. Und schon mal wirklich abgefragt, ob der entsprechende Datensatz sich geändert hat? Also die Rohdaten? Nicht selten bekommt das "HasChanges" einen True, wenn dies gar nicht der fall ist?

Was genau wird denn dann nicht richitg in der Listbox angezeigt?

08.09.2008 - 11:17 Uhr

Hallo,

ich nutze ClickOnce um meine Anwendungen zu publizieren. Doch nun habe ich festgestellt, das der Anwender Updates ablehnen kann und diese auch nie wieder abgefragt werden. Kann man diese Abfrage irgendwie wiederholen?
Das ist insbesondere Interssant für diejenigen, die versehentlich auf "abgelehnt" geclickt haben.

07.09.2008 - 23:23 Uhr

Gibt es in WPF etwas ähnliches wie ein Button.PerformClick?

07.09.2008 - 22:21 Uhr

Du sagst, das die änderungen nicht in der ListView angezeigt werden, du verwendest allerdings auch kein DataTemplate. Daher sollte nur ObjectName angezeigt werden. Wie also stellst du also fest, ob der wert tatsächlich geändert ist?

07.09.2008 - 13:08 Uhr

Arg. Klar. Total übersehen

WPF hinzufügen IsSynchronizedWithCurrentItem="True"

Und natürlich Sortiert die Listbox nicht, wenn du keine Sortdesciption hinzupackst.

07.09.2008 - 12:51 Uhr

Meine Vermutung liegt darin, das es sich hierbei um ein Problem in der sqlDataAdapter liegt. Dann bin ich der verkehrte Ansprechpartner, da ich nur mit XML Datenbanken arbeite.

Probiere mal folgendes. Ein neuer Button der dein folgeden Code ausführt um eine XML Datenbank zu erzeugen und auf dei Platte zu schreiben.

dataset.writeXML("c:\testdatenbank.xml");

Dann entferne deine Befüllung DataSets vom TableAdapter. Lese statt dessen deine Daten so ein. (Deine Relation muß trotzdem erzeugt werden)

dataset.readXML("c:\testdatenbank.xml");

Und arbeite erst mal nur mit deser XML-Datenbank. Falsche Datenbankverbindungen oder Schreibfehler/Rückschreibfehler usw kann man dann ausschließen.

Probiere dann noch mal deinen Code aus mit den beiden Beispielen von oben.

Evtl mußt du auch noch deiner Datenbank mitteilen das die Änderungen übernommen werden müssen. (ein schnell übersehendes Problem).

dataSet.AcceptChanges()

07.09.2008 - 11:49 Uhr

Nein macht kein unterschied.

Zeig mal dein Databinding

06.09.2008 - 22:16 Uhr

Das Problem liegt wahrscheinlich daran, das du deine Listbox per WPF gebunden hast. Dadurch wird ein DataView erzeugt, welches nicht die Tabelle selbst ist und unabhängig funktioniert.

Also nutze auch genau diese DataRow und dann wird die auch zurück in die Tabelle geschrieben...


((DataRowView)MeinListView.Items.CurrentItem)["OrderIndex"] //Damit auf die DataView

((DataRowView)MeinListView.Items.CurrentItem).Row["OrderIndex"] //Damit greifst du auf die Datentabelle zu



Probiere dies mal aus. Am besten auch in dieser Reihenfolge. Da ersteres Beispiel die Daten im erzeugten DataView ändert und du somit die nicht die Automation (z.B. berechnete Spalten) dieses DataView´s beeinflusst.

06.09.2008 - 22:02 Uhr

Meines Wissens nicht, da durch WPF MDI und viele derer Elemente nicht mehr gibt. Aber guck dir mal das hier an AvalonDock
Damit hast du wohl ein aktuelleres Layout. Auch wenn ich mir die sachen lieber selbst bastl.

06.09.2008 - 21:58 Uhr

Jedes Element in WPF hat die Eigenschaft AllowDrop. Diese ist Standartgemäß false, wenn du die nicht auf true stellst, wird da nichts passieren.

06.09.2008 - 02:45 Uhr

@Wolf_maYer:

Das ist nicht nur schneller, sondern auch der richtige weg.
Das einfach & ist ein Binäres Und, das && ein logisches.

Kannst du mir bitte auch den Unterschied erklären?

05.09.2008 - 17:08 Uhr

Ich bin schon so weit, das ich eine gefilterte ansicht bekomme,


            DataView dv = new DataView(DataBase.Firmen);
            string filter = "Firmenname LIKE '*" + tbSearch.Text + "*'";
            NavFirmen.CustomFilter = filter;
            dv.RowFilter = filter;
            if (dv.Count > 0)
            {

                bool b = NavFirmen.MoveCurrentTo(dv[0].Row);
                MessageBox.Show(b.ToString());
            }


Jedoch sagt nun mein BindingNavigator, das es diese DataRow gar nicht gibt.

05.09.2008 - 16:09 Uhr

verwendetes Datenbanksystem: XML

Hallo ich habe zwei Tabellen. Die Mastertabelle enthält die Firmen und die Slave die Ansprechpartner. Beide sind über eine DataRelation verbunden.

Nun möchte ich eine Suche durchführen. Habe mich aber noch nie mit Suchanfragen beschäftigt. Bisher habe ich dies über Code gelöst (s.u.): Jedoch kann ich mir kaum vorstellen, das es dort nicht eine elegantere Lösung gibt.

Wichtig bei der Suche ist mir, das

  1. zuerst alle SlaveDatensätze des Masterdatensatzes durchsucht werden, bevor zum nächsten Masterdatensatz gesprungen wird
  2. Das z.B. bei einer Suche von "Eier" auch ein "Herr Meier-Schmitz" geliefert wird.

Wie kann ich das am besten Realisieren? (Natürlich soll dann bei einen Finden auch nach und nach zu den einzelnen Datensätzen gesprungen werden können).


if (((bool)SucheFirmenname.IsChecked) & (_Firma.Text.ToLower().Contains(suche))) { found = true; }
            if (((bool)SucheAddresszeile1.IsChecked) & (_Adresszeile1.Text.ToLower().Contains(suche))) { found = true; }
            if (((bool)SucheAddresszeile2.IsChecked) & (_Adresszeile2.Text.ToLower().Contains(suche))) { found = true; }
            if (((bool)SucheAnsprache.IsChecked) & (_Anrede.Text.ToLower().Contains(suche))) { found = true; }
            if (((bool)SucheAnsprechpartner.IsChecked) & (_Ansprechpartner.Text.ToLower().Contains(suche))) { found = true; }
            if (((bool)SucheEmail.IsChecked) & (_EMailAdresse.Text.ToLower().Contains(suche))) { found = true; }
            if (((bool)SucheFax.IsChecked) & (_Fax.Text.ToLower().Contains(suche))) { found = true; }
            if (((bool)SucheHomepage.IsChecked) & (_Homepage.Text.ToLower().Contains(suche))) { found = true; }
            if (((bool)SucheOrt.IsChecked) & (_Ort.Text.ToLower().Contains(suche))) { found = true; }
            if (((bool)SuchePLZ.IsChecked) & (_PLZ.Text.ToLower().Contains(suche))) { found = true; }
            if (((bool)SucheStelle.IsChecked) & (_Stelle.Text.ToLower().Contains(suche))) { found = true; }
            if (((bool)SucheStellenID.IsChecked) & (_StellenID.Text.ToLower().Contains(suche))) { found = true; }
            if (((bool)SucheStellenlink.IsChecked) & (_Stellenlink.Text.ToLower().Contains(suche))) { found = true; }
            if (((bool)SucheTelefon.IsChecked) & (_Telefon.Text.ToLower().Contains(suche))) { found = true; }

05.09.2008 - 14:35 Uhr

Genau das will ich ja!!! Und genaus das ist die Frage. Welcher Trigger zielt auf das DragDrop Element und wie muß ich es definieren, das es nur dann funktioniert, wenn es sich um ein bestätigtes objekt handelt?

05.09.2008 - 13:21 Uhr

Das ist kein Beispiel für WPF sondern C#.

Ich meinte damit Eventtrigger und Style´s, Ich will Style und Code getrennt lassen.

05.09.2008 - 11:35 Uhr

geht das nicht direkt über wpf. immerhin will ich das control danach auch wieder zurück stellen auf standartansichten.