Laden...
E
ErikM myCSharp.de - Member
Fachinformatiker - Anwendungsentwicklung zuhause Dabei seit 07.10.2011 39 Beiträge
Benutzerbeschreibung
Bibb biddi boo.. !

Forenbeiträge von ErikM Ingesamt 39 Beiträge

17.03.2015 - 23:35 Uhr

Hallöchen,

ich habe mich in der Vergangenheit eher mit WPF beschäftigt, jedoch kommt jetzt auch WebForms dazu.

Irgendwie kommt es mir so vor, dass die Page_Load-Methode in den Code-Behind-Dateien verwendet wird, als wäre sie der Constructor der jeweiligen Page.

Warum ist das so ?
Die Dinge die dort meistens getan werden, können doch auch in dem tatsächlichen Constructor ablaufen (also "public Klassenname()" )

Verstehe ich das falsch ?
Warum wird stattdessen immer Page_Load verwendet = ?

Mit freundlichen Grüßen

11.09.2014 - 10:14 Uhr

Ich möchte mit Linq to XML ausschließlich die Kind-Elemente einsammeln, die vom XmlSerializer erzeugt worden sind, nachdem dieser beispielsweise ein Objekt serialisiert hat.


XmlSerializer serializer = new XmlSerializer(typeof(T));
            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Encoding = new UnicodeEncoding(false, false); // no BOM in a .NET string
            settings.Indent = true;
            settings.OmitXmlDeclaration = true;
            settings.ConformanceLevel = ConformanceLevel.Auto;
            using (StringWriter textWriter = new StringWriter())
            {
                using (XmlWriter xmlWriter = XmlWriter.Create(textWriter, settings))
                {
                    serializer.Serialize(xmlWriter, poco);
                }

                //return textWriter.ToString();
                /* XmlDocument x = new XmlDocument();
                x.LoadXml(textWriter.ToString());
                
                return x.FirstChild; */

                XDocument x = XDocument.Parse(textWriter.ToString());
                string result = "";

//Hier sammel ich die Elemente ein die ich benötige.. 

                IEnumerable<XElement> children = x.Descendants().Skip(1);
                foreach (XElement childnode in children)
                {
                    result += childnode;
                }

                return result;



<note>
    <to> Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend!</body>
</note>


ich möchte quasi nur die elemente "to,from,heading,body" haben.. mein Code oben funktioniert.

Ich frage mich ob es wirklich nötig ist mit einer for-each-Schleife zu arbeiten.. ob das eventuell eleganter geht 🤔

Mit freundlichen Grüßen

09.09.2014 - 11:10 Uhr

Hallöchen,

ich arbeite mit mehreren Asp.net - Webservices (*.asmx-Dateien)..

Ich möchte s.g. Dienstverweise verwenden, jedoch werden scheinbar immer die Klassen, die vom Dienstverweis benutzt werden generiert... Mehrfach 😮

Kann man die Klassengenerierung komplett abschalten, denn eigentlich sind alle notwendigen Klassen schon woanders definiert.. . diese würde ich auch gerne benutzten 😮

Mit freundlichen Grüßen

14.10.2013 - 22:12 Uhr

Hellöle,

ich versuche einen TimeSpan-Wert im Xaml innerhalb eines TextBlocks mit StringFormat zum Beispiel folgendermaßen darzustellen "2 Tage, 4 Stunden"

geht das so überhaupt mit StringFormat ?

Ich stehe auf dem Schlauch

Mit freundlichen Grüßen

11.10.2013 - 08:16 Uhr

Guten Morgen,

also ich hab das mittlerweile geregelt bekommen :3

ich verwende folgendes


<DataGrid Name="dataGrid"
 <i:Interaction.Triggers>
                <i:EventTrigger EventName="SelectionChanged">
                    <i:InvokeCommandAction Command="{Binding SelectionChanged}" CommandParameter="{Binding SelectedItems,ElementName=dataGrid}">
                    </i:InvokeCommandAction>
                </i:EventTrigger>
            </i:Interaction.Triggers>

//.....

</DataGrid>


Im ViewModel führt er dann jedesmal das Command SelectionChanged aus und dort kann ich dann mit den SelectedItems arbeiten :3

"Danke" für die Anworten..

10.10.2013 - 09:20 Uhr

Hellöle,

ich versuche mittels Binding die SelectedItems eines Datagrids einzufangen.
Das scheint allerdings so nicht direkt machbar zu sein 😮

Ich arbeite normalerweise in WPF nach dem MVVM-Pattern und für mich stellt sich die Frage wie ich das sinnvoll lösen kann, wenn ich schon nicht auf Datagrid.SelectedItems binden darf :ö

Hat irgendwer eine Idee dazu ?

Mit freundlichen Grüßen

08.09.2013 - 16:30 Uhr

Thema hat sich erledigt..

Beim UnitOfWork wurde IDisposable nicht richtig implementiert o___o

Aber jetzt ist alles schön :3

02.09.2013 - 15:48 Uhr

Hast du im anderen Projekt vllt. Referenzen zu anderen Entitäten (die dann noch auf den alten Context zeigen)?

Also es ist jetzt so, dass alle empfangenen Objekte in Listen gepackt werden..

Im Repository steht



_context.Set<T>().AsQueryable();


später ruft ein Controller drauf "ToList()" auf..

Wie kriege ich das hin, dass keine Referenzen mehr den alten DbContext benutzen ?

Ich stehe hart auf dem Schlauch 😮

02.09.2013 - 14:10 Uhr

Joa.. o__o,

ich füllte mit den empfangenen Objekten ein IEnumerable<T> und das ist vermutlich verkehrt 😮.. denn die zeigen ja tatsächlich noch auf den DbContext.. 😦

02.09.2013 - 13:16 Uhr

Das mit dem Proxy brachte leider keinen Erfolg 😦

Ich habe mal in einem Testprogramm folgendes Szenario nachgebaut.. dort funktioniert das 😮..


            Lot a;
            using (Entities context = new Entities())
            {
                 a = context.Lot.First();
            }

            using (Entities context = new Entities())
            {
                context.Lot.Attach(a);
                a.CurrentAmount = 1000;
                
                context.SaveChanges();
            }

alles sehr merkwürdig 😦

02.09.2013 - 11:56 Uhr

verwendetes Datenbanksystem: MSSQL Server 2008 R2

Hallöchen,

ich habe in meiner Anwendung ein generisches UnitofWork und diverse Repositories.

diese benutze ich so:



using (IUnitOfWork unitofwork = new UnitOfWork()) 
using (IRepository<Product> productRepository = new Repository<Product()) {

//hier passiert irgendwas

unitofwork.SaveChanges();

}


Die Klasse unitofwork legt auch den s.g. DbContext an, der nach dem Verlassen und disposen des UnitofWork-Blocks auch disposed wird.

Problem : Scheinbar wird der DbContext nicht vernünftig mitentsorgt, sodass beim späteren Versuch ein Attach(T Entitfy) durchzuführen fehlschlägt..

Fehlermeldung ist dann sinngemäß : > Fehlermeldung:

"Eine Entity kann nicht von 2 EntityChangeTrackern verfolgt werden" 😮

Woran mag das liegen ?

Mit freundlichen Grüßen

14.06.2013 - 10:50 Uhr

Jo funktioniert . . .sehr gut :3 👍

14.06.2013 - 10:19 Uhr

kann sein, dass das genau das ist was ich benötige :3

Danke. .

14.06.2013 - 10:06 Uhr

Hallöchen,

ich frage mich grade wie ich mit LINQ innerhalb eines string-arrays das Element einfangen kann, dass am Häufigsten vorkommt..

Ich stehe da irgendwie gerade auf dem Schlauch..

Ich habe ein großes Array in dem ich die Zeilen einer CSV-Datei als weitere string-Arrays drin liegen habe (vorher gesplittet)..



col = Lines.Select(elem => elem.ElementAt(20)).ToList()
//Spalte steht alleine in "col"

Jetzt wollte ich quasi in einer bestimmten Spalte das häufigste Element haben...
Aber irgendwie komm ich nicht drauf..

10.05.2013 - 08:33 Uhr

Ja.. langsam dämmert es mir :3..

Danke ! 👍

09.05.2013 - 18:34 Uhr

Wenn ich nach dem "ContinueWith" - Ausdruck noch ein "updateTask.Wait()" mit dranhänge arbeitet das Programm wie erwartet.. merkwürdig

09.05.2013 - 18:31 Uhr

Halöle,

ich habe hier eine relativ kleine Anwendung in der ich mal Tasks anstatt von Threads u. BackgroundWorker verwenden wollte..


private static void Main(string[] args)
        {
            
            Action updateAction = new Action(() =>
                {
                    UpdateController updateController = new UpdateController();
                    updateController.UpdateOperation(); 

                });

            Task updateTask = new Task(updateAction, TaskCreationOptions.LongRunning);
       
            Action<Task> finshedUpdateNotityAction = new Action<Task>(FinishedUpdateNotify);
            updateTask.ContinueWith(finshedUpdateNotityAction);
            
            updateTask.Start();

            
        }

        public static void FinishedUpdateNotify(Task task)
        {

            Console.WriteLine("\n\nUpdate abgeschlossen"); 
        }

Das Programm sollte eigentlich starten..
Eine Action erzeugen, die eine Instanz von UpdateController erzeugt und dort die Methode "updateController.UpdateOperation()" startet.. Danach.. also wenn dieser Task beendet ist, sollte mit ContinueWith nur eine Meldung ausgegeben werden.

Jedoch wird keine Instanz erzeugt und das Programm beendet sich ohne Fehlermeldung 😦
Verstehe ich irgendwas falsch ?. . Was läuft da schief ?

02.05.2013 - 23:55 Uhr

Nabend,

ich frage mich was es mit den s.g. Komponentenklassen auf sich hat..

Es heisst das sie das Interface ICompontent implementieren bzw. von Component erben, jedoch begreife ich nicht ganz wozu das gut ist..

Geht es da nur darum, dass man diese Komponenten dann im Designer verwenden kann ?

Ist das überhaupt noch aktuell, macht man das noch ?.. (Ich arbeite nicht mit WinForms, falls das irgendwie dazu gehört)

Ich bin verwirrt 🤔

Mit freundlichen Grüßen

09.04.2013 - 14:16 Uhr

Ja ne.. es lag an der ValidationRule 😭

Ich musste ValidationStep="UpdatedValue" mit reinschreiben..tadaa



<TextBox Width="200">
            <Binding Path="Text" UpdateSourceTrigger="PropertyChanged" NotifyOnValidationError="True" NotifyOnSourceUpdated="True">
                <Binding.ValidationRules>
                    <c:TextValidation  [B]ValidationStep="UpdatedValue"[/B] />
                </Binding.ValidationRules>
            </Binding>
        </TextBox>


Jetzt ist alles schön 🙂

09.04.2013 - 13:48 Uhr

Naja.. okee :3... jetzt funktioniert es :3

ABER :<

Mein INotifyPropertyChanged verhält sich merkwürdig, wenn man innerhalb einer Textbox die "Zurück-Taste" (also die über der Eingabetaste).. wenn man damit einzelne Buchstaben quasi löscht, dann wird meine "OnPropertyChanged"-Methode nicht gestartet..

Is das ein gewolltes Verhalten von WPF ?

merkwürdig--

09.04.2013 - 13:10 Uhr

Zu Testzwecken habe ich nachdem ich weiter herumgoogelte, meine Command-Klasse umgebaut



private Action _action;
        private MainWindowViewModel model;

        public Command(Action action, MainWindowViewModel error)
        {
            model = error;
            _action = action;
        }

        public void Execute(object parameter)
        {
            _action();
        }

        public bool CanExecute(object parameter)
        {
            return new TextValidation().Validate(model.Error, CultureInfo.CurrentCulture).IsValid;
        }
        public void RaiseCanExecuteChanged()
        {
            CommandManager.InvalidateRequerySuggested(); 
        }

        public event EventHandler CanExecuteChanged
        {
            add { CommandManager.RequerySuggested += value; }
            remove { CommandManager.RequerySuggested -= value; }
        }


Aber ich habe den Eindruck, dass "CommandManager.InvalidateRequerySuggested(); " nicht anspringt..

D.h. meine CanExecute-Methode arbeitet nicht.. was mache ich falsch = ? 🙁

09.04.2013 - 12:14 Uhr

Ja.. das Command hab ich schon implementiert..

Was müsste ich denn in der CanExecute-Methode schreiben um an die ValidationResults zu kommen..

Die Validierung wird ja in XAML angestoßen.. die Textboxen verfärben sich bei einem Fehler..
Aber was müsste ich tun, damit das Command davon erfährt = ?

09.04.2013 - 11:04 Uhr

Halöle,

ich habe hier ein Window


<Window x:Class="ValidationRuleBeispiel.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:c="clr-namespace:ValidationRuleBeispiel"
        Title="MainWindow" Height="350" Width="525">
    <StackPanel Orientation="Vertical">
        <StackPanel.Resources>
            <ControlTemplate x:Key="validationTemplate">
                <DockPanel DataContext="{Binding ElementName=adorner, Path=AdornedElement.(Validation.Errors)/ErrorContent}">
                    <Ellipse x:Name="Ellipse" 
                            DockPanel.Dock="Left" 
                            Margin="2,0,2,0" 
                            Width="14" Height="14" 
                            VerticalAlignment="Center" 
                            Stroke="#40000000" StrokeThickness="2" Fill="Red">
                        <Ellipse.ToolTip>
                            <Border MaxWidth="500" MaxHeight="500">
                                <ContentControl FontSize="14" Content="{Binding}"/>
                            </Border>
                        </Ellipse.ToolTip>
                    </Ellipse>
                    <Border BorderBrush="#40FFAF00" BorderThickness="2" IsHitTestVisible="False">
                        <Border.Background>
                            <SolidColorBrush Color="Red" Opacity="0.2"/>
                        </Border.Background>
                        <AdornedElementPlaceholder Margin="-2" Name="adorner"/>
                    </Border>
                </DockPanel>
            </ControlTemplate>

            <Style x:Key="textBoxInError" TargetType="{x:Type TextBox}">
                <Style.Triggers>
                    <Trigger Property="Validation.HasError" Value="true">

                        <Setter Property="ToolTip"
        Value="{Binding RelativeSource={x:Static RelativeSource.Self},
                        Path=(Validation.Errors)[0].ErrorContent}"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </StackPanel.Resources>
        <TextBox Width="200">
            <Binding Path="Text"  UpdateSourceTrigger="PropertyChanged">
                <Binding.ValidationRules>
                    <c:TextValidation />
                </Binding.ValidationRules>
            </Binding>
        </TextBox>
        
        <Button Command="{Binding DasCommand}" Height="25" Width="150">Der Button</Button>
    </StackPanel>
</Window>


Dazu folgendes ViewModel


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Windows;
using ValidationRuleBeispiel.Annotations;

namespace ValidationRuleBeispiel
{
    public class MainWindowViewModel : INotifyPropertyChanged
    {
        private string _text;

        public string Text
        {
            get { return _text; }
            set
            {
                if (value == _text) return;
                _text = value;
                OnPropertyChanged("Text");
            }
        }


        public Command DasCommand { get; set; }


        public MainWindowViewModel()
        {
            DasCommand = new Command(DoSomeThing);
        }

        public void DoSomeThing()
        {
            MessageBox.Show("Funktioniert !");
        }

        public event PropertyChangedEventHandler PropertyChanged;

        [NotifyPropertyChangedInvocator]
        protected virtual void OnPropertyChanged(string propertyName)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}


Meine TextValidation-Klasse


class TextValidation : ValidationRule
    {
        public override ValidationResult Validate(object value, CultureInfo cultureInfo)
        {
            bool isValid = false;

            Regex regex = new Regex(@"^[A-Za-z(\-)?]+(( )?[A-Za-z(\-)?])*$");
            try
            {
                if (((string)value).Length > 2)
                {
                    if (regex.IsMatch((string)value))
                    {
                        isValid = !((string)value).Last().Equals('-');
                    }

                }


            }
            catch (Exception e)
            {
                return new ValidationResult(false, "Konnte den Wert > " + value + "\n\n" + e.Message);
            }

            ValidationResult result;

            if (isValid)
            {
                result = new ValidationResult(isValid, null);
            }
            else
            {
                result = new ValidationResult(isValid, "Konnte den Wert > " + value + "< " + "nicht validieren :<");
            }
            return result;
        }
    }

Wenn die Validierung fehlschlägt, wird mir das auch im Window angezeigt.
Wie kann ich das Command dazu bringen, dass CanExecute false zurückliefert, wenn die Validierung fehlgeschlagen ist, sodass der Button sich entsprechend ausgraut 🤔

Gegoogelt habe ich gestern danach, jedoch nicht das gefunden was ich brauchte. Ich stiess auf das Interface IDataErrorInfo -> funktioniert das was ich vorhabe nur mit diesem Interface oder kann ich auch anderweitig irgendwie abfrage ob die Validierung fehlgeschlagen ist.. ?

Ziel ist, dass ich bei einem größeren Window alle Textboxen von verschiedenen Validation-Klassen validieren lasse und erst wenn ALLE Validierungen korrekt waren das Command ausführbar wird... garnich so leicht :<

25.03.2013 - 19:11 Uhr

Danke für die Antwort ! 👍
Ich habe es jetzt so gemacht.. .


      <TreeView ItemsSource="{Binding Shops}" Margin="10" Height="200">
            <TreeView.Resources>
                <HierarchicalDataTemplate DataType="{x:Type TreeViewBindings:Shop}" ItemsSource="{Binding Categories}">
                    <StackPanel>
                        <TextBlock Text="{Binding Path=Shopname}" />
                    </StackPanel>
                </HierarchicalDataTemplate>
                <HierarchicalDataTemplate DataType="{x:Type TreeViewBindings:Category}" ItemsSource="{Binding Products}">
                    <StackPanel>
                        <TextBlock Text="{Binding Path=CategoryName}" />
                    </StackPanel>
                </HierarchicalDataTemplate>
                <HierarchicalDataTemplate DataType="{x:Type TreeViewBindings:Product}" ItemsSource="{Binding Products}">
                    <StackPanel>
                        <TextBlock Text="{Binding Path=Title}" />
                    </StackPanel>
                </HierarchicalDataTemplate>
            </TreeView.Resources>
        </TreeView>


Die Ausgabe ist in etwa :

  • Shop1
    ------Category1
    --------------------Product1
    --------------------Product2
    --------------------Product2
    ------+Category2
    -Shop2
    ------+Category1
    ------+Category2

quasi genau das, was ich wollte :3

MfG
E.

25.03.2013 - 16:07 Uhr

genau..

mir ist irgendwie noch nicht ganz klar an welcher Stelle ich den Kategorietitel ausgeben muss, denn
wenn ich beispielsweise


<TreeView.ItemTemplate>
      <TextBlock Text="{Binding CategoryName}" />
      <HierarchicalDataTemplate ItemsSource="{ Binding Products}">

         <TextBlock Text="{Binding ProductTitle}" />

     </HierarchicalDataTemplate>
 </TreeView.ItemTemplate>


kriege ich einen Fehler --> sinngemäß "Die Item-Auflistung muss vor dem ersten Aufruf leer sein"

MfG l'Erik

25.03.2013 - 14:43 Uhr

Ich habe in meinem Programm eine Liste mit "Category"-Objekten, jedes "Category"-Object enthält eine weitere Liste mit "Product"-Objekten.. Diese wollte ich in einem TreeView anzeigen lassen.. Quasi erst die Kategorien und wenn man die dann anklickt die jeweiligen Produkte..

Ich habe jetzt folgenden Quelltext..

 
<TreeView Height="300"  Width="500" Margin="0,20,0,0" x:Name="TreeView" ContextMenu="{StaticResource Popup}" ItemsSource="{Binding Categories}">
                       
                      
<TreeView.ItemTemplate>
                           
    <HierarchicalDataTemplate ItemsSource="{ Binding Products}">

        <TextBlock Text="{Binding ProductTitle}" />
                            
    </HierarchicalDataTemplate>
</TreeView.ItemTemplate>
                           

                          
</TreeView>

Es werden jetzt nur Produkte angezeigt, der Kategorietitel jedoch nicht..
Weiss jemand, wie ich den gegebenen Quelltext anpassen must, damit das passiert X(

Mit freundlichen Grüßen

24.03.2013 - 17:55 Uhr

verwendetes Datenbanksystem: MS-SQL .. gelegentlich MySQL & PostgreSQL

Halöle,

bisher arbeite ich immer mit dem Entity Framework direkt und gelegentlich lese ich von Repositories und dem s.g. Unit of Work - Pattern.. 🤔

Von dem Repository verstehe ich bisher nur, dass es als Abstraktionschicht vor das Entity Framework geschoben wird, jedoch nicht so richtig warum man das tun sollte.. 🤔

Könnte jemand bitte erklären, was es mit den beiden Entwurfmustern auf sich hat - welche Gründe es gibt diese einzusetzen ?..

Bisher finde ich immer nur Seiten auf denen die Implementierung erklärt wird, jedoch nicht vernünftig welche Gründe für und dagegen sprechen diese Muster einzusetzen.. 🙁

Mit freundlichen Grüßen

03.09.2012 - 10:45 Uhr

Halöle,

ich habe in meiner Anwendung ein Datagrid.
In diesem ändere ich abhängig vom Inhalt der Zeilen des DataGrids die Hintergrundfarbe der ganzen Zeile, jedoch möchte ich nur die einzelne Zelle worin der Inhalt auftaucht einfärben.

Ich arbeite mit diesen DataTriggers. Das funktioniert auch ganz gut. Aber ich weiss nicht was ich als Target nehmen soll wenn ich die Zelle anstatt der Zeile einfärben möchte... 🙁 Dabei benutze ich ja schon DataGridCell als Target..

Weiss das jemand?

Snippet


<DataGrid CanUserAddRows="False" Name="Grid" Height="614" AutoGenerateColumns="False" Language="DE-de" BorderBrush="#FF0A0909" BorderThickness="1" CanUserSortColumns="True" CanUserReorderColumns="False" CanUserResizeColumns="False" CanUserResizeRows="False" IsManipulationEnabled="False" IsReadOnly="True" MouseDoubleClick="DetailButtonClick" SelectionMode="Single" Width="961">
                    <DataGrid.Columns>
                        
                        <DataGridTextColumn Binding="{Binding LineItem.Orders.OrderNumber, StringFormat=dd.MM.yyyy}" Header="Bestellnummer" Width="130" />
                        <DataGridTextColumn Binding="{Binding LineItem.Orders.Customer.RecipientName, Converter={StaticResource converter}}" Header="Kunde" Width="260" />
                        <DataGridTextColumn Binding="{Binding LineItem.Orders.OrderNumber, StringFormat=dd.MM.yyyy}" Header="Anlegedatum" Width="130" />
                        <DataGridTextColumn Binding="{Binding LineItem.Orders.OrderNumber, StringFormat=dd.MM.yyyy}" Header="Bestellnummer" Width="130" />
                        <DataGridTextColumn Binding="{Binding ReturnState.StateName}" Header="Status" Width="130" />
                        <DataGridCheckBoxColumn />
                    </DataGrid.Columns>

                    <DataGrid.CellStyle>
                        <Style TargetType="{x:Type DataGridCell}">
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding ReturnState.StateName}" Value="schwebend">
                                    <Setter Property="Background" Value="Purple"/>
                                    <Setter Property="Foreground" Value="White" />
                                </DataTrigger>
                       
                                <DataTrigger Binding="{Binding ReturnState.StateName}" Value="angelegt">
                                    <Setter Property="Background" Value="Red"/>
                                    <Setter Property="Foreground" Value="White" />
                                </DataTrigger>
                                <DataTrigger Binding="{Binding ReturnState.StateName}" Value="ungeprüft">
                                    <Setter Property="Background" Value="Orange"/>
                                    <Setter Property="Foreground" Value="Black" />
                                </DataTrigger>
                                <DataTrigger Binding="{Binding ReturnState.StateName}" Value="offene Sonderfälle">
                                    <Setter Property="Background" Value="Black"/>
                                    <Setter Property="Foreground" Value="White" />
                                </DataTrigger>
                                <DataTrigger Binding="{Binding ReturnState.StateName}" Value="wird repariert">
                                    <Setter Property="Background" Value="Yellow"/>
                                    <Setter Property="Foreground" Value="Black" />
                                </DataTrigger>

                                <DataTrigger Binding="{Binding ReturnState.StateName}" Value="eingelagert">
                                    <Setter Property="Background" Value="SpringGreen"/>
                                    <Setter Property="Foreground" Value="Black" />
                                </DataTrigger>

                                <DataTrigger Binding="{Binding ReturnState.StateName}" Value="Kunde">
                                    <Setter Property="Background" Value="SpringGreen"/>
                                    <Setter Property="Foreground" Value="Black" />
                                </DataTrigger>
                            </Style.Triggers> 
                        </Style>
                    </DataGrid.CellStyle>
                </DataGrid>

08.08.2012 - 14:02 Uhr

erledigt. .DataGrid.UpdateLayout() hat geholfen 🙂

08.08.2012 - 12:59 Uhr

ja.. er springt hinein jedoch arbeitet er nicht mit dem Text der in der Spalte steht. .

Als "Value" hat er den Namen des Converters, nicht den eigentlichen Text den ich trimmen wollte..

08.08.2012 - 11:49 Uhr

ja.. da sollte in der Tat "Content" stehen.. aber getrimmt hat er trotzdem nicht 🙁

08.08.2012 - 10:28 Uhr

Halöle, 🙂

ich habe ein DataGrid in dem ich circa 4 Spalten anzeigen lasse. Die dazugehörigen Werte kommen
aus einer Datenbank (MSSQL-EF)..

Unter anderem gibt es dort die Spalte ProductTitle, dessen Werte unglücklicherweise sehr viele Leerzeichen hinter dem eigentlichen "ProductTitle" beinhalten.. diese Leerzeichen wollte ich wegtrimmen..

Ich habe einen Converter geschrieben


class StringToTrimmedStringConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return (object) value.ToString().Trim();
        }    
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return (object)value.ToString().Trim();
        }
    }

In der entsprechenden DataGridTextColumn verwende ich das so


<DataGridTextColumn Binding="{Binding AssignedProduct.Product.ProductTitle}" Header="Titel">
                        <DataGridTextColumn.CellStyle>
                            <Style TargetType="DataGridCell">
                                <Setter Property="Foreground" Value="{Binding AssignedProduct.Product.ProductTitle, Converter={StaticResource converter}}" />
                            </Style>
                        </DataGridTextColumn.CellStyle>
                    </DataGridTextColumn>

Ich denke ich mache irgendfetwas falsch.. =)
Weiss jemand wo mein Fehler ist oder wie ich das mit dem Trimmen erreichen kann. .

05.12.2011 - 23:01 Uhr

Vielen Dank 👍,

aber ich denke, dass ich mir das alles irgendwie irgendwann die Tage nochmal ausgiebig nachlesen muss... also XPath-Geschichten usw...

05.12.2011 - 08:57 Uhr

XmlReaderSettings set = new XmlReaderSettings();
            set.DtdProcessing = DtdProcessing.Ignore;
            XmlReader reader = XmlReader.Create("..\\..\\index.html", set);
            XPathDocument doc = new XPathDocument(reader);
            
            XPathNavigator navi = doc.CreateNavigator();
          

            Console.WriteLine(navi.Select("//h1").Current.Value);
           
          
            Console.ReadKey();

Funktioniert irgendwie auch nicht..
Kennt jemand ein gutes Tutorial wo das erklärt wird oder den korrekten XPath mit Erklärung?
Linq to XML oder eine externe Bibliothek wollte ich erstmal vermeiden...

04.12.2011 - 21:36 Uhr

Guten Abend,

ich stehe hier grade hart auf dem Schlauch

auf folgendes XHTML Dokument soll mit C# zugegriffen werden


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>:: Titel</title>

<link href="template.css" rel="stylesheet" type="text/css" />
</head>

<body>
<h1>Text</h1>
<ul id="navigation">

        <li>Navigation</li>
        <li>Navigation</li>
</ul>
        <div id="text">ganz viel text</div>
</body>
</html>

C# Quelltext bisher


            XmlReaderSettings set = new XmlReaderSettings();
            set.DtdProcessing = DtdProcessing.Ignore;
            XmlReader reader = XmlReader.Create("..\\..\\index.html", set);
            XPathDocument doc = new XPathDocument(reader);
            
            XPathNavigator navi = doc.CreateNavigator();
            navi.MoveToFirstChild();
            XPathNodeIterator iterator = navi.SelectChildren("/html/body", "");
            do
            {

                Console.WriteLine(iterator.Current.Select("//h1").Current.Value);
            } while (iterator.MoveNext());
          
            Console.ReadKey();


Die Idee ist, dass ich erstmal nur den Inhalt von "h1" auslese. Stattdessen kriege ich den kompletten Inhalt der Seite.. Fummel ich am XPath-String herum bekomme ich gelegentlich auch garnichts angezeigt..

Woran kann das liegen ?( (Ich bin mir sicher, dass ich nur eine Kleinigkeit übersehe 🙁

23.10.2011 - 02:09 Uhr

Huhu, =)

kann mir mal jemand erklären warum der folgende Aufruf gültig ist ?(


var thread = new Thread(_manager.SpeichernThread);

Eigentlich gehört da doch noch ein ThreadStart() oder ein ParameterizedThreadStart() davor...
(laut 🛈 )

Ist es möglich, dass Visual Studio das erkennt und selber vor dem Kompilieren hinzufügt ?(

19.10.2011 - 09:27 Uhr

SQL-Auth in dem Sinne, dass man für jeden Benutzer auf dem Server ein SQL-Namen anlegt?.. .
Ich will ja im Prinzip Windows-Domänenbenutzer verwenden, jedoch vorher sagen welcher benutzt werden soll... im Connectionstring bedeutet die Klausel "integrated-security" ja, dass der grade angemeldete Windows Benutzer verwendet wird.. .

19.10.2011 - 09:13 Uhr

verwendetes Datenbanksystem: Microsoft SQL Server

Halöle...

ich sitzte hier an einer relativ kleinen Anwendung, die sich an einem im Hause befindlichen MSSQL-Server anmelden soll... Geschrieben wurde das Programm mit C#.

Das Programm wird von verschiedenen Benutzern verwendet und als Authentifizierung verwendet es "integrated security".. .Sofern der Benutzer an seinem Rechner sitzt und mit seinem Domänenbenutzernamen angemeldet ist funktioniert alles wunderbar...

ABER.. es gibt die Möglichkeit, dass einzelne Benutzer mit ihren privaten Notebooks das Programm benutzen wollen. Die privaten Geräte hängen jedoch nicht in der Domäne, deshalb funktioniert "integrated security" nicht so wie gewollt..

Ist es möglich C# zu sagen, dass es bei Integrated Security nicht den direkt angemeldeten Benutzer verwenden soll, sondern den jeweiligen Domänenbenutzernamen... (der dann eventuell von Benutzer extra eingegeben wird)

MfG