Laden...

Forenbeiträge von Juergen123 Ingesamt 27 Beiträge

01.10.2012 - 11:14 Uhr

Hallo,

vielen Dank für die Anregung und die Antwort. Mit Hilfe dieser Informationen und der deutschen Webseite DataBindings debuggen – WPF habe ich das Problem lösen können.

Lösung:

Grid.Column.Width ist von Type "GridLength". Nach Anpassung der Properties und erneuten Bindung hat es nun funktioniert.

Beim ersten Versuch (siehe letzte Antwort von mir) hatte ich noch einen Fehler drin weshalb die Bindung nicht funktionierte, mit Hilfe des Ausgabefensters und des DebugConverters konnte isch den Fehler identifizieren und klären.

Vielen Dank für Eure Unterstützung.

mfg

Jürgen

26.09.2012 - 07:47 Uhr

Hallo,

dies hat keine Auswirkung, ich hatte es auch bereits in anderen Varianten getestet.

mfg Juergen

15.09.2012 - 07:53 Uhr

Hallo,

ich möchte eine Spaltenbreite (Crid.Column Width) an ein Property binden und die Änderungen mit dem Gridsplitter im Property merken. Die Bindung funktioniert mit folgendem Code solange man den Gridsplitter per Maus nicht verändert.


<Grid Visibility="Visible" >
            <Grid.ColumnDefinitions>
                <ColumnDefinition x:Name="Column1"  Width="{Binding NaviWidthOnLeft, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}"  />
                                  
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            
            <StackPanel Grid.Column="1">
                <Label>1. TextBox mit Elementbinding (wird immer korrekt angezeigt)</Label>
                <TextBox Text="{Binding ElementName=Column1, Path=Width}"/>
                <Label>2. TextBox, Slider und Button sind korrekt mit dem Property AviWidthOnLeft gebunden.</Label>
                <TextBox Text="{Binding NaviWidthOnLeft, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />
                <Button Name="btnPlus5" Command="{Binding Plus5Command}" >+5</Button>
                <Slider Value="{Binding NaviWidthOnLeft, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" Maximum="800"></Slider>
            </StackPanel>
            <GridSplitter Grid.Column="0" Width="5" Background="DarkGray"  />
        </Grid>

In der Textbox 1 wird per Elementname Binding die aktuelle Width angezeigt, diese passt immer auch wenn man die Spaltenbreite mit der Maus ändert.

In der Textbox 2 wird der Propertywert NaviWidthOnLeft angezeigt. Dieser ist direkt an die Width der Column gebunden. Beim Start der Applikation wird der Wert angezeigt und man kann die Spaltenbreite der gebundenen Spalte durch Wertänderung oder den Slider oder den Button ändern. Sobald jedoch die Spaltenbreite einmal mit der Maus geändert wurde so löst sich die Bindung und der Wert in Textbox 1 wird aktuell gehalten und das Property bekommt von den Änderungen nichts mit.

Wie kann ich das Propety richtig an die Spaltenbreite binden damit dieses auch Änderungen durch den Gridsplitter (ziehen mit der Maus) mit bekommt?

Ich hatte auch bereits den Mode TwoWay an der Column Bindung getestet, dann wird jedoch nichts an das Property weitergegeben.

Beim Property handelt es sich um ein double, das bei Änderungen ein OnPropertyChanged auslöst


public double NaviWidthOnLeft
        {
            get
            {
                return _naviWidthOnLeft;
            }
            set
            {
                _naviWidthOnLeft = value;

                OnPropertyChanged(() => NaviWidthOnLeft);
            }
        }

Im Voraus besten Dank für Eure Mühe.

mfg

Jürgen

10.06.2012 - 17:56 Uhr

Hallo,

ich habe eine generische Metode

OnPropertyChanged<T>(object value) { ... }

und möchte diese bei meinen PropertySetter nutzen. Der Aufruf z.B.

OnPropertyChanging<int>(value);

funktioniert wunderbar. Damit ich nicht jedes mal den jeweiligen Typ eintragen muss haben ich den Aufruf

OnPropertyChanging<value.GetType()>(value);

versucht. Leider funktioniert dies nicht.

Wie kann ich den Aufruf so dynamisieren damit die Klasse der Variablen value als generischer Typ weitergegeben wird?

Im Voraus besten Dank für Eure Mühe.

mfg Jürgen

29.02.2012 - 06:00 Uhr

Hallo,

echt Klasse, das war es.

Die Umstellung hat funktioniert und die Menüs werden korrekt angezeigt.

mfg Jürgen

28.02.2012 - 20:03 Uhr

Hallo,

danke für die Info, das sehe ich genauso. Was mir aufgefallen ist das auch andere Programme auf einmal dieses Problem auf diesem Rechner haben.

Kennt jemand eine Einstellmöglichkeit die darauf Auswirkung haben könnte?

mfg

Jürgen

28.02.2012 - 19:16 Uhr

Hallo,

vielen Dank für die Infos, es ist jedoch kein Touchpad (rechtshändig) im Einsatz.

Hat jemand noch eine andere Idee?

mfg

Jürgen

27.02.2012 - 19:24 Uhr

Hallo,

kann man den Button Kopieren im Documentviewer ausblenden?

Im Voraus besten Dank

mfg

Jürgen

26.02.2012 - 16:23 Uhr

Hallo Talla,

vielen Dank für die Info.

Wenn jemand eine Templatelösung hätte wäre es echt Klasse 😃)

mfg

Jürgen

26.02.2012 - 13:07 Uhr

Hallo,

ich habe mit dem folgenden XAML ein einfaches Menü erstellt.

<Menu Name="Menue"    >
           <MenuItem Header="_Datei" HorizontalAlignment="Left" HorizontalContentAlignment="Left" >
                <MenuItem Header="B_eenden" Click="btnexit_Click"  />
            </MenuItem>
            <MenuItem Header="Info">
                <MenuItem Header="_Info" />
            </MenuItem>

        </Menu>

Bei der Ausführung werden die Einträge der jeweiligen Menüs jedoch rechtsbündig angezeigt (siehe Anhang). Somit beginnen die Menüeinträge links außerhalb des Window.

Wie kann man das Menü in ein "normales" Verhalten bringen damit die Menüeinträge linksbündig angezeigt werden und somit nicht mehr außerhalb des Window beginnen?

Im Voraus besten Dank für eine kurze Info.

mfg

Jürgen

25.02.2012 - 18:04 Uhr

Hallo,

wie kann man im DocumentViewer ein Ereignis Auslösen wenn der Benutzer gedruckt hat?

Im Voraus besten Dank für Eure Mühe.

mfg Jürgen

09.01.2012 - 18:48 Uhr

Hallo Christian,

vielen Dank für die Klasse Links 😃)

mfg

Jürgen

09.01.2012 - 09:25 Uhr

Hallo,

kennt jemand eine gute Dokumentation, ein Workshop oder ein Beispielprojekt mit dem man sich im Bereich WPF C# Vektorgrafik Editor Programmierung einarbeiten kann.

Grund hierfür ist, dass ich ein kleines Vektorgrafikprogramm in WPF C# erstellen möchte. In diesem soll man z.B. ein oder mehrere Rechtecke erstellen können und diese per Maus dann wieder auswählen und ggf. ändern können.

Im Voraus besten Dank für Eure Tipps.

mfg

Jürgen

04.11.2011 - 16:53 Uhr

Hallo talla,

vielen Dank für die Info.

mfg Jürgen

04.11.2011 - 13:07 Uhr

Hallo,

ich lade aus der NorthwindDatenbank mit folgendem Code die Tabelle Suppliers in eine DataTable und ordne dies der ComboBox ac1 zu.


            string _TableName = "Suppliers";
            SqlCommand cmd = new SqlCommand();
            cmd.CommandText = "SELECT * FROM " + _TableName + " WHERE 1=1";
            cmd.Connection = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLServer"].ConnectionString);
            SqlDataAdapter _Da = new SqlDataAdapter();
            _Da.SelectCommand = cmd;
            _Da.FillLoadOption = LoadOption.OverwriteChanges;
            DataSet _Ds = new DataSet();
            _Da.FillSchema(_Ds, SchemaType.Mapped, _TableName);            
            _Da.Fill(_Ds, _TableName);
            ac1.DisplayMemberPath = Ds.GetDt("Supliers.cbSupplierID").Columns["CompanyName"].ToString();
            ac1.SelectedValuePath = Ds.GetDt("Supliers.cbSupplierID").Columns["SupplierID"].ToString();
            ac1.ItemsSource = _Ds.Tables[_TableName].DefaultView;

            ICollectionView view = CollectionViewSource.GetDefaultView(_Ds.Tables[_TableName]);

            

Mein Problem ist nun das die ICollectionView auf CanFilter = false (view.CanFilter=false) steht und isch somit nicht filtern kann.

**Wie kann ich eine DataTable füllen dessen View gefiltert werden kann?

Gibt es ein Beispiel?**

Im Voraus vielen Dank.

mfg
Jürgen

26.10.2011 - 20:42 Uhr

Hallo,

vielen Dank für Eure Hilfe!!!

20.10.2011 - 18:26 Uhr

Hallo,

wie kann man einer WPF Combobox mit der Eigenschaft IsEditable=True es verhindern das Einträge gewählt werden die nicht in der Items Auflistung sind.

Ziel soll sein das Der Benutzer die Werte wie in einem Textfeld eingeben kann und die ComboBox versucht die Eingabe zu vervollständigen. Wenn der Benutzer eine Eingabe getätigt hat die nicht in der Auflistung enthalten ist dann soll eine Meldung z.B. "nicht in Liste" erscheinen.

Bei Bedarf soll der User auch die ComboBox aufklappen und den Eintrag auswählen können (Standardverhalten der ComboBox).

Im Voraus besten Dank für Eure Mühe

Gruß Jürgen

27.09.2011 - 21:50 Uhr

Hallo,

vielen Dank für die schnelle Information!!!

dafür gibt es die DataSet.Merge() bzw. DataTable.Merge()-Methode.
Du liest also die Daten von der DB in ein neues DataSet (bzw. DataTable) ein und synchronisierst dann das bisherige DataSet (bzw. DataTable) mit der Merge()-Methode (beachte die verschiedenen Überladungen!).

Gibt es hierfür ein Beispiel?

Kann man es auch mit derr Fill Methode hin bekommen wenn man den PrimaryKey definiert?

Für die Navigation in WPF habe ich ein ICollectionView im Einsatz. Dieses Zeigt auf den DataContext eines Panel ("CollectionViewSource ICollView = CollectionViewSource.GetDefaultView(sp1.DataContext);"). Wie kann ich an die Daten des aktuellen Datensatz (SelectedItem) kommen? Kann man mit der DataTable casten oder muss man eine explizite Klasse für die Tabelle anlegen? Gibt es ein Beispiel? Ich möchte z.B. den Wert aus der Spalte "ProductID" auslesen.

Im Voraus besten Dank

mfg

Jürgen

27.09.2011 - 12:42 Uhr

Hallo,

ich möchte mit ADO.NET eine DataTable aus einer MSSQL2008 Tabelle aktualisieren.

Ich habe mit folgendem Code die das DataSet und die DataTable "Products" aus der Northwind Datenbank gefüllt (funktioniert soweit).

Code:



    class DsProducts
    {
        public SqlConnection con { set; get; }

        public SqlCommand cmd { set; get; }

        public DataSet Ds { set;  get; }

        public SqlDataAdapter Da { set; get; }

        public DataTable Dt { set;  get; }

        private ICollectionView _ICollView;

        public ICollectionView ICollView
        {
            set
            {
                _ICollView = value;
            }

            get
            {
                return _ICollView;
            }
        }

        public  DsProducts()
        {
            Fill();
        }

        public void Connection()
        {
            // Verbindung definieren
            con = new SqlConnection();

            con.ConnectionString = ConfigurationManager.ConnectionStrings["SQLServer"].ConnectionString;  // Holt den Wert aus App.config

           

        }

        public void Fill()
        {
            if (con == null) Connection();

            cmd = new SqlCommand();
            cmd.CommandText = "Select * FROM Products";

            cmd.CommandType = CommandType.Text; 

            cmd.Connection = con;

            if (Ds == null) Ds = new DataSet();

            if (Da == null) Da = new SqlDataAdapter();

            Da.SelectCommand = cmd;

            Da.FillLoadOption = LoadOption.OverwriteChanges;

            //Ds.Tables["Products"].Clear();

            Da.Fill(Ds, "Products");
            
            if (Dt == null) Dt = Ds.Tables["Products"];

            if (_ICollView != null) ICollView.Refresh();
        }
        
       
    }
}

Nun möchte ich das die DataSet-Daten aus der Datenbank aktualisiert werden (kein Update der DataSet-Daten in die Datenbank sondern die DataSet-Daten sollen nochmals aus der Datenbank geladen werden).

Meine Idee war einfach nochmals die Methode Fill auszuführen. Leider werden die bereits geänderten Daten nicht wieder mit den Daten aus der Datanbank aktualisiert. Die Fill Methode durchläuft Da.Fill(Ds, "Products"); ohne Fehler. Die Daten im DataSet werden jedoch nicht aktualisiert. Wenn ich zuvor die Tabelle mit "Ds.Tables["Products"].Clear();" leere dann würde es gehen. Ich möchte mit der Lösung die Daten im DataSet aktualisieren, im Falle ein anderer User zwischenzeitlich Änderungen in der Datenbank durchgeführt hat.

Grundsätzlich wäre eine Leerung der Daten auch denkbar, jedoch nicht schön da somit immer alle Daten geladen werden müssen.

Gibt es eine Möglichkeit einzelne Datensätze oder Bereiche in einer DataTable mit den Datenbank-Daten zu aktualisieren?
Wie könnte ich mir mit der ICollView den aktuellen Datensatz ermitteln (mittels der Spalte ProductID) und den SelectedItem nach dem Neuladen (leeren und dann Fill - wenn es anderst nicht geht) wieder auf die gleiche ProductID positionieren?

Im Voraus besten Dank für Eure Mühe.

mfg

Jürgen

25.08.2011 - 18:25 Uhr

Hallo,

ich habe mit folgendem Code ein DataSet (der NorthwindDatanbank) eingebunden und ein Evanthandler zugeordnet.


 public ContactsDataProvider()
    {
        dataset = new NorthwindDataSet();
        adapter = new ContactsTableAdapter();
        adapter.Fill(dataset.Contacts);

        dataset.Contacts.ContactsRowChanged +=
        new NorthwindDataSet.ContactsRowChangeEventHandler(ContactsRowModified);
        NorthwindDataSet.ContactsRowChangeEventHandler(ContactsRowModified);

    }
    public void [B]ContactsRowModified[/B](object sender, NorthwindDataSet.ContactsRowChangeEvent e)
    {
        adapter.Update(dataset.Contacts);
    }

Mein Problem ist nun das "ContactsRowModified" immer doppelt durchlaufen wird und beim zweiten mal der folgende Fehler kommt.

Fehlermeldung:
Diesem Command ist bereits ein geöffneter DataReader zugeordnet, der zuerst geschlossen werden muss.

Im Voraus besten Dank.

mfg Jürgen

25.08.2011 - 17:11 Uhr

Hallo,

ich habe ein WPF Window dessen Textboxen mit einem DataTable eines DataSets gebunden ist.

Zur Navigation nutze ich eine ICollectionView. Das Navigieren von Datansatz zu Datansatz mit MoveTo.. funktioniert ganz Klasse.

Wie kann ich dem User die Möglichkeit geben einen neuen Datansatz erfassen zu lassen. Ich Nutze gerade die Datanbank Northwind und arbeite mit der Tabelle Contacts. In Dieser Tabelle muss das Feld CompanyName gefüllt sein. Wenn ich nun einen leeren Datansatz mit NewRow() anlege dann muss das Feld bereits gefüllt sein. Ich möchte jedoch das im gebundenen Formular alle Felder leer sind und die Prüfung erst beim speichern durchgeführt wird.

Wie kann ich im Formular einen leeren Datansatz darstellen (wie in Win-Form), damit der Benutzer diesen Füllen kann ?

Im voraus besten Dank für die Mühe

Jürgen

24.08.2011 - 16:24 Uhr

Hallo,

danke für den Link.

Welche Informationen gibt es für BindingNavigation?

Im Voraus besten Dank

Gruß Jürgen

24.08.2011 - 14:53 Uhr

Hallo,

ich beginne neu mit WPF und möchte zwei Datagrids auf Basis der Northwind Datenbank erstellen.

Im MasterGrid sollen die Produkte aufgelistet werden (alle Felder der Tabelle Products).

Im ChildGrid sollen die jeweiligen OrderID's aus der Tabelle Order_Details angezeigt werden.

Mein Ziel ist ein typisiertes Dataset das ich mittels c# den DataGrids zuordnen kann.

Die Verbindung der zwei Tabellen wird über die Felder Products.ProduktID und Order_Details.ProduktID dargestellt.

Wie kann ich nun das Binding in C# definieren damit immer nur die Orders zum ausgewählten Produkt angezeigt werden?

Wie kann ich mittels Button von einem Datensatz (in Products) zum anderen springen?

Im Voraus vielen Dank für Eure Mühe.

Jürgen

23.12.2010 - 06:40 Uhr

ich ruf den Code derzeit zum Test per Menü explizit auf.

Ich habe im Test die Box von Hand gefüllt und über das Menü den Code ausgeführt. Später soll das ganze automatisch geschehen. Hierzu verwende ich folgenden Code.

rtb.AppendText("1234,45\t+\r\n");  
rtb.SelectAll();
rtb.SelectionTabs = new int[] { 100,200 };
rtb.SelectAll();  // Nur zur Sicherheit im Test - ich denke das brauch ich nicht
rtb.SelectionAlignment = HorizontalAlignment.Right;

Vielleicht habe ich einen gedanklichen Fehler.

Bei der Formatierung mit Leerzeichen und der rechtsbündigen Ausrichtung der rtb funktioniert alles. Wenn ich diesen Text z.B. per Copy Paste ins Excel kopiere dann schmeißt er alles in eine Spalte. Bei Tabs würde er es schön aufteilen.

Gibt es ggf. eine Möglichkeit den Text über ein Ereignis (habe noch keines gefunden) zu manipulieren, wenn der Anwender den markierten Text mit [STRG]+[C] in die Zwischenablage kopiert? Somit könnte ich an den entsprechenden Stellen des Textes "\t" an die Zwischenablage weiter geben.

Ich habe zwischenseitlich auch noch erfahren das es mit einer RichTextBox gar nicht geht. Kann dies sein ?

Quelle: http://www.tech-archive.net/Archive/German/Entwicklung/microsoft.public.de.german.entwickler.dotnet.csharp/2005-04/msg00663.html

Damit ich meinen Kassenstreifen mit einem Tab erstellen kann gibt es da auch noch eine andere Lösung?

Im Voraus besten Dank für Eure Mühe!!!

22.12.2010 - 11:18 Uhr

steht der Code auch wirklich, nachdem der Text in die TextBox geschrieben wurde?

Ja - Ich habe bewußt die Einstellungen nach der Eingabe des Text durchlaufen.

Und zu deiner 2. Frage: dafür gibt es die SelectionTabs-Eigenschaft (schau dir doch einfach mal alle Eigenschaften der Klasse in der MSDN an 😉

Sorry - Werde ich machen.

Hat jemand noch eine Idee bezüglich der rechtsbündigen Tabs in der RichTextBox ?

22.12.2010 - 09:32 Uhr

Leider geht es nicht, es kommt jedoch keine Fehlermeldung aber es ändert sich auch nichts.

Folgenden Code verwende ich

rtbBeleg.SelectAll();
rtbBeleg.SelectionAlignment = HorizontalAlignment.Right;

Das Ziel ist eine Art Kassenzettel bei dem die Zahl mit dem "+" durch ein Tabulator getrennt ist.

Gibt es weitere Ideen ?

Kann man eigentlich alle Standard Tabulatoren löschen/deaktivieren ?

21.12.2010 - 09:51 Uhr

Hallo,

ich möchte in eier RichTextBox ungefähr folgenden Text ausgeben.

_123,00 +_
_1234,23 +_
_23456,12 +_
Zwischen der Zahl und dem Plus möchte ich einen Tabulator verwenden. Das Ganze muss jedoch rechtsbündig sein. Wie kann ich dies rechtsbündigen Tabs in einer RichTextBox umsetzen ? Im Voraus vielen Dank für Eure Mühe Jürgen