Laden...
F
Flohen myCSharp.de - Member
Schwäbische Alb Dabei seit 08.02.2007 86 Beiträge
Benutzerbeschreibung

Forenbeiträge von Flohen Ingesamt 86 Beiträge

06.06.2014 - 09:48 Uhr

So, nach langem suchen, war die Lösung doch so nah.

Da ich mein Fenster mit WindowChromes angepasst habe, fehlte nur das Property: WindowChrome.IsHitTestVisibleInChrome="True"

Trotzdem danke an alle, die versucht haben mir zu helfen.

Gruß
Flohen

05.06.2014 - 11:25 Uhr

Ok, es liegt am Binding.
Aber warum.

Der Binding-Pfad den ich oben erwähnt habe funktioniert bei allen anderen Controls.
Auch in dem Grid hab ich testhalber eine weitere Spalte eingefügt.
Da funktioniert genau dieser Pfad.


<local:DataGridFlexibleColumn Header="{x:Static l:Reports_Text.FilterView_Header_Value}" Binding="{Binding Value}" Width="240" UsePeriod="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.UsePeriods, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnTargetUpdated=True, UpdateSourceTrigger=PropertyChanged}"/>
                        <DataGridTextColumn Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.UsePeriods}"/>

Also bei der DataGridTextColumn wird der Wert angezeigt, bei der DataGridFlexibleColumn nicht.
Warum?

Was mach ich falsch?

Mein ViewModel ist an den DataContext des UserControls gebunden und UsePeriods ist ein Property in dieser Klasse.

Gibt es noch eine andere Möglichkeit einen Wert zu binden? Über eine Resource oder so?

04.06.2014 - 15:04 Uhr

Hallo Gemeinde,

ich hab jetzt schon Stunden damit verbracht im Internet und hier eine Lösung zu finden, aber alles was ich finde hilft mir nicht weiter.

Zu meiner Ausgangslage:

Ich habe eine Klasse DataGridFlexibleColumn (Control) die von DataGridBoundColumn abgeleitet ist. In dieser Klasse möchte ich ein DependencyProperty erstellen.
Das hab ich so gemacht:


public static readonly DependencyProperty UsePeriodProperty = DependencyProperty.Register("UsePeriod", typeof(bool), typeof(DataGridFlexibleColumn));
        public bool UsePeriod
        {
            get
            {
                return (bool)GetValue(UsePeriodProperty);
            }
            set
            {
                SetValue(UsePeriodProperty, value);
            }
        }

In meinem View habe ich dann ein Binding gesetzt:


<local:DataGridFlexibleColumn UsePeriod="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.UsePeriods}"/>

Mein Problem ist, dass das Binding nicht funktioniert. Setze ich den Wert hart, also auf "true" dann funktioniert es. Auch der Binding-Path ist korrekt (hab das mit einem anderen Control getestet).
Nur beides zusammen funktioniert nicht.

Was ich bisher alles probiert habe:

Ich habe beim DependencyProperty Metadaten hinzugefügt.


FrameworkPropertyMetadata meta = new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.BindsTwoWayByDefault);
meta.PropertyChangedCallback = new PropertyChangedCallback(OnUsePeriodChanged);

Ich habe im View alles hinzugefügt was mir sinnvoll erschien. UpdateSourceTrigger, Mode=TwoWay, usw...

Nichts funktioniert.

Vielleicht kann mir einer von euch helfen.

Danke!

16.05.2014 - 10:16 Uhr

Danke für den Tip. Aber wie du oben im Code vielleicht siehst, hab ich auch das schon probiert. Leider bekomme ich kein Event von diesem Image. Das muss irgendwo vorher abgefangen werden, nur leider weiß ich nicht wo...

09.05.2014 - 16:35 Uhr

Hallo,

ich kann in diesem Fall leider kein MVVM benutzen, da dass ganze ein Template ist.
Natürlich habe ich versucht das Event im Code-Behind abzufangen, aber genau da liegt das Problem. Es feuert kein Event. Gar kein Event wird für das Image gefeuert, weil es wahrscheinlich schon irgendwo vorher abgefangen wird. Nur weiß ich nicht wo.

Und mit Auskennen bei den Events, meine ich, dass ich nicht weiß wer, was zu welchen Zeitpunkt macht.

Aber danke für die Hilfe.

09.05.2014 - 13:48 Uhr

Hallo,

ich habe einen eigenen Window-Style definiert. In diesem ist auch ein Icon/Image implementiert.
Jetzt möchte ich bei einem Doppelklick, dass das Fenster schließt, doch leider bekomme ich keinen Zugriff auf das entsprechende Event des Images.
Ich kenn mich mit den WPF Events noch nicht sonderlich gut aus, vielleicht kann mir einer von euch helfen.


<Style x:Key="MyWindowStyle"
           BasedOn="{StaticResource MyWindowBaseStyle}"
           TargetType="{x:Type Window}">
        <Setter Property="ResizeMode" Value="CanResize" />
        <EventSetter Event="Loaded" Handler="WindowLoaded" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Window}">
                    <Border x:Name="PART_Container" Padding="7,7,7,5">
                        <Grid TextOptions.TextFormattingMode="Display" TextOptions.TextRenderingMode="ClearType">
                            <Border x:Name="PART_Border"
                                    Width="Auto"
                                    Height="Auto"
                                    Background="{StaticResource BackgroundBrush}"
                                    BorderBrush="{StaticResource BorderBrush}"
                                    BorderThickness="1">
                                <DockPanel HorizontalAlignment="Stretch"
                                           VerticalAlignment="Stretch"
                                           Background="Transparent">
                                    <Border x:Name="TitleBar"
                                            Background="{StaticResource BackgroundBrush}"
                                            BorderThickness="0"
                                            DockPanel.Dock="Top">
                                        <Grid Height="32" Background="Transparent">
                                            <Grid.ColumnDefinitions>
                                                <ColumnDefinition Width="36" />
                                                <ColumnDefinition />
                                                <ColumnDefinition Width="34" />
                                                <ColumnDefinition Width="34" />
                                                <ColumnDefinition Width="34" />
                                            </Grid.ColumnDefinitions>
                                            <Image x:Name="Icon"
                                                   Grid.Column="0"
                                                   Width="32"
                                                   Height="32"
                                                   Margin="4,-7,0,7"
                                                   HorizontalAlignment="Right"
 [color]Hier möchte ich das Event feuern[/COLOR]
                                                MouseLeftButtonDown="IconMouseLeftButtonDown"
                                                   PreviewMouseLeftButtonDown="IconMouseLeftButtonDown"
                                                   MouseDown="IconMouseLeftButtonDown"
                                                   Source="{Binding Path=Icon,
                                                                    Mode=OneWay,
                                                                    RelativeSource={RelativeSource TemplatedParent}}"/>
                                                
                                            <TextBlock x:Name="Caption"
                                                       Grid.Column="1"
                                                       Margin="4,0,0,0"
                                                       HorizontalAlignment="Center"
                                                       VerticalAlignment="Center"
                                                       FontFamily="Segoe UI"
                                                       FontSize="12"
                                                       Opacity="0.66"
                                                       Text="{Binding Path=Title,
                                                                      Mode=OneWay,
                                                                      RelativeSource={RelativeSource TemplatedParent}}" />
....
....
....

Gruß
Flohen

13.01.2014 - 14:06 Uhr

Hallo nochmal,

es tut mir leid, es war mein gedanklicher Fehler.

Ich hab mich zu sehr auf das DataGridTextBoxColumn Objekt konzentriert.
Mit einer DataGridTemplateColumn geht es natürlich besser. Das Stichwort hat gefehlt, jetzt hab ich auch Hilfe bei Google gefunden.

Danke an Coffeebean für die Zeit!

Hier der provisorische Code:


<DataGridTemplateColumn Header="{x:Static l:Reports_Text.FilterView_Header_Value}" Width="240">
                                <DataGridTemplateColumn.CellTemplate>
                                    <DataTemplate>
                                        <ContentControl x:Name="content" Content="{Binding Value}" >
                                        </ContentControl>
                                        <DataTemplate.Triggers>
                                            <DataTrigger Binding="{Binding FieldItem.Type}" Value="String">
                                                <Setter TargetName="content" Property="ContentTemplate">
                                                    <Setter.Value>
                                                        <DataTemplate>
                                                            <CheckBox IsChecked="True"></CheckBox>
                                                        </DataTemplate>
                                                    </Setter.Value>
                                                </Setter>
                                            </DataTrigger>
                                        </DataTemplate.Triggers>
                                    </DataTemplate>
                                </DataGridTemplateColumn.CellTemplate>
                            </DataGridTemplateColumn>

Ich hoffe jemand anderen hilft er schneller als mir. 😉

Kann geschlossen werden!

Gruß
Lars

13.01.2014 - 11:47 Uhr

So ungefähr hast es richtig verstanden.

Die 3 ComboBoxen + Textbox sollen den Filter darstellen.

Was ich umsetzen will, weiß ich (Danke) aber mir fehlt das WIE!?
Deswegen wollte ich wissen WIE ich es machen soll, nicht was.

Die Trigger funktionieren nicht so wie ich will.
Ich poste mal ein Beispiel, wie ich es machen wollen würde und dann könnt ihr ja mal drüber schauen, was ich falsch mache.


<DataGridTextColumn Header="{x:Static l:Reports_Text.FilterView_Header_Value}" Binding="{Binding Value}" Width="240">
                                <DataGridTextColumn.EditingElementStyle>
                                    <Style>
                                        <Style.Triggers>
                                            <DataTrigger Binding="{Binding Path=FieldItem.Type, UpdateSourceTrigger=PropertyChanged}" Value="String">
                                                <Setter Property="TextBlock.Text" Value="String"/>
                                            </DataTrigger>
                                        </Style.Triggers>
                                    </Style>
                                </DataGridTextColumn.EditingElementStyle>
                            </DataGridTextColumn>

Ich hab mir gedacht, dass ich den EditStyle ändere wie ich ihn brauche, aber der DataTrigger funktioniert so nicht.
Da fehlt noch irgendein Zugriff auf das selektierte Item der zweiten ComboBox...das muss doch auch ohne zusätzliches Property im ViewModel gehen, mit irgendeinem Binding???

13.01.2014 - 11:00 Uhr

Hallo Community,

ich versuche mal mein Problem zu beschreiben, könnte sein das ich was vergesse oder das es schon mal Forum besprochen wurde (ich hab nix gefunden).
Aber ich hoffe trotzdem, dass ihr mir helfen könnt.

Also:
Ich möchte einen dynamischen Filter erstellen, der so aufgebaut wird:

And/Or | benutzerspezifisches Feld | größer/kleiner/usw | Wert

Das benutzerspezifische Feld wird aus einer Collection ausgewählt die folgende Klasse beinhaltet:


public class EnumValue
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Type { get; set; }

        public EnumValue(int id, string name, string type)
        {
            this.Id = id;
            this.Name = name;
            this.Type = type;
        }

        public EnumValue() { }
    }

So, das gesamte DataGrid hat als ItemSource eine Collection von dieser Klasse:


public class FilterItem : ViewModelBase
    {
        private string _value;
        public string Value
        {
            get { return _value; }
            set
            {
                //Set() ==> MVVMLight
                Set(() => Value, ref _value, value);
            }
        }

        private EnumValue _fieldItem;
        public EnumValue FieldItem
        {
            get { return _fieldItem; }
            set
            {
                //Set() ==> MVVMLight
                Set(() => FieldItem, ref _fieldItem, value);
            }
        }

        private EnumValue _operatorItem;
        public EnumValue OperatorItem
        {
            get { return _operatorItem; }
            set
            {
                //Set() ==> MVVMLight
                Set(() => OperatorItem, ref _operatorItem, value);
            }
        }

        private EnumValue _exp;
        public EnumValue ExpressionItem
        {
            get { return _exp; }
            set
            {
                //Set() ==> MVVMLight
                Set(() => ExpressionItem, ref _exp, value);
            }
        }
    }

Das funktioniert soweit alles. Die ComboBoxen werden korrekt gefüllt und auch die Bindings funktionieren.

So sieht das Ganze in Xaml aus:


<DataGrid Name="dgFilter" ItemsSource="{Binding FilterItems}" AutoGenerateColumns="False" SelectedCellsChanged="dgFilter_SelectedCellsChanged" SelectionUnit="CellOrRowHeader"
                              BorderThickness="0" BorderBrush="{x:Null}" CanUserResizeRows="False" RowHeaderWidth="20">
                        <DataGrid.Columns>
                            <DataGridComboBoxColumn Header="{x:Static l:Reports_Text.FilterView_Header_Expression}" Width="60"
						                            DisplayMemberPath="Name"
						                            SelectedItemBinding="{Binding ExpressionItem}"
                                                    ElementStyle="{StaticResource ElementExpressionStyle}"
						                            EditingElementStyle="{StaticResource ElementExpressionStyle}"/>
                            <DataGridComboBoxColumn Header="{x:Static l:Reports_Text.FilterView_Header_Fields}" Width="120"
						                            DisplayMemberPath="Name"
						                            SelectedItemBinding="{Binding FieldItem, UpdateSourceTrigger=PropertyChanged}" 
						                            ElementStyle="{StaticResource ElementFieldStyle}"
						                            EditingElementStyle="{StaticResource ElementFieldStyle}"/>
                            <DataGridComboBoxColumn Header="{x:Static l:Reports_Text.FilterView_Header_Operators}" Width="120"
						                            DisplayMemberPath="Name"
						                            SelectedItemBinding="{Binding OperatorItem}" 
						                            ElementStyle="{StaticResource ElementOperatorStyle}"
						                            EditingElementStyle="{StaticResource ElementOperatorStyle}"/>
                            <DataGridTextColumn Header="{x:Static l:Reports_Text.FilterView_Header_Value}" Binding="{Binding Value}" Width="240"> 
                            </DataGridTextColumn>
                        </DataGrid.Columns>
                    </DataGrid>

Was ich jetzt gern machen würde, wäre das Value Feld anhand vom ausgewählten FieldItem verändern. Die Information, welcher Typ ein FieldItem ist, steht im Objekt unter Type.
Also Beispiel:
Wenn ein Int32-Feld ausgewählt wird, nur Integer Werte eingeben kann.
Oder, dass wenn ein DateTime Feld ausgewählt wird, ein Kalender aufgeht.
USW.

Wie kann ich das realisieren?
Ich hab schon mit DataTrigger, MultiBinding und EditElementStyle probiert, aber irgendwie steig ich nicht dahinter wie ich das genau machen soll.

Hat von euch jemand eine Idee?

Vielen Dank schon mal, nur für's durchlesen! 😉

Gruß
Flohen

21.11.2013 - 19:13 Uhr

Servus,

also nach langem hin und her haben wir uns für DevExpress entschieden.
Aber in erster Linie weil wir der Meinung waren, dass dieses Programm einen besseren Eindruck macht und der End-User-Designer kein extra Tool ist, sondern ein Control. Dadurch kann man ihn besser anpassen.
Ich habe in der Zwischenzeit auch noch einiges mehr über das DevExpress-Reporting-Tool herausgefunden. Anpassbarkeit, Thumbnail eines aktuellen Reports erstellen, Icons der Toolbar ändern, usw...

Bin also damit voll zufrieden, kann jetzt aber keine Aussage machen, ob das mit Telerik auch gegangen wäre oder nicht.

Zu deinen Anforderungen:

  • Fließtextbriefe und Rechnungen ((Keine Ahnung, wir machen nur Stastikreports, aber sollte möglich sein)
  • Listen mit geschachtelten "Bändern" (aber keine Tabellen) ((das ist möglich)
  • Vom Anwender einfach zu bedienender Editor mit der Möglichkeit Datenfelder zu plazieren ((auch das ist sehr gut gelöst bei DevExpress)
  • Jeder Ausdruck sollte auch als PDF exportierbar sein. ((klar, ist aber bei allen Reportingtools wohl möglich)
  • Unterstützung von Matrix-Schnelldrucker (Ja sowas gibt's noch Augenzwinkern ) Obwohl das wohl eher eine Frage der Treiber ist... ((so isses, die gehen auch nur auf den Druckertreiber)
  • Es soll immer direkt gedruckt werden, eine Preview deren Druck dann erst noch per Tastendruck erreicht wird, ist nicht gewünscht. Einfach in der GUI auf "PRINT" drucken und gut...((kein Problem, man kann jedes Format sofort exportieren ohne vorherige Auswahl)

Hoffe ich konnte dir ein wenig helfen.

Gruß
Flohen

02.09.2013 - 15:01 Uhr

Mhh Schade.

Ich hab mir einen tiefer greifende Aussage gewünscht.
Aber gut, ist schon lange her.

Mal schauen, vielleicht kann jemand anderes noch was dazu sagen.
Ansonsten wählen wir einfach und hoffen für die Zukunft das Beste! 😃

Soweit ich es bis jetzt beurteilen konnte, unterscheiden sie sich nicht so sehr, dass es eine falsche Wahl nicht wirklich geben kann...hoffe ich!

Gruß
Flohen

P.S.: Ich werde dann später versuchen die Gründe meiner Wahl zu erläutern.

02.09.2013 - 11:53 Uhr

Hallo,

sorry, dass ich einen alten Post wieder ausgrabe, aber ich bin bei mir grad auf dem selben Trip.

Hat von euch niemand Erfahrungen mit den jeweiligen Tools?
Ich habe die Trails schon installiert und ausprobiert, konnte aber natürlich nur an der Oberfläche kratzen.

Eine langjährige Erfahrung würde mir sehr helfen.

Vielleicht kann der Postersteller was darüber sagen?

Schönen Gruß
Flohen

11.01.2013 - 09:48 Uhr

Unter LocalSystem. Welche Einstellung soll ich vornehmen. Ich weiß ja nicht welcher Benutzer angemeldet ist und ich kann auch keine Abfrage einbauen.

Aber ist das in meinem Fall wichtig? Da ich ja zum Debuggen auf den Aufruf als Dienst verzichte!
Auch wenn ich die aufrufende Klasse nicht von ServiceBase ableite funktioniert es nicht.
Also ist hier die Frage: Liegt es an den Serviceeinstellungen?

10.01.2013 - 18:05 Uhr

Hallo Forum,

mein Problem ist eigentlich schnell beschrieben, aber ich muss dabei noch ein wenig ausholen.
Also das Problem ist, dass ich bei einem Process.Start() die folgende Fehlermeldung bekomme.

Fehlermeldung:
Der angeforderte Vorgang erfordert erhöhte Rechte

Jetzt das drumherum:

Im Prinzip versuche ich aus einem Windowsservice eine setup.exe aufzurufen.
Da ich aber Probleme beim Debuggen dieses Service hatte, habe ich mit diesen Zeilen...


if (!Environment.UserInteractive)
{
     ServiceBase[] ServicesToRun;
     ServicesToRun = new ServiceBase[] 
	{ 
		new InstallService() 
	};
     ServiceBase.Run(ServicesToRun);
}
else
{
     InstallService service = new InstallService();
     service.StartAsApplication();
}

... eine normale Applikation erstellt, damit ich normal Debuggen kann.

Jetzt bekomme ich die oben beschriebene Fehlermeldung.

Hier mein Code:


Process installProcess = new Process();
installProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
installProcess.StartInfo.UseShellExecute = false;
installProcess.StartInfo.CreateNoWindow = true;
installProcess.StartInfo.FileName = Path.Combine(szSetupFilePath, "setup.exe");
installProcess.StartInfo.Arguments = m_szParameter;
if (System.Environment.OSVersion.Version.Major >= 6)
   installProcess.StartInfo.Verb = "runas";
installProcess.Start();
installProcess.WaitForExit();

Ich habe diesen Code in einer normalen Konsolenanwendung laufen lassen und da funktioniert er. Ich habe auch die Klasse, die von Servicebase abgeleitet wird, ohne Vererbung benutzt und den selben Fehler bekommen.

Was mache ich falsch?

Gruß
Flohen

P.S. Falls ich irgendeine Info vergessen habe, sagt es mir...

19.04.2012 - 15:32 Uhr

Hallo,

das war nicht die Frage!
Das ist auch nicht mein Problem.
Sondern, dass ein ServiceClient keine Proberty hat die Proxy heißt oder sowas in der Richtung.

Ich habe aber mittlerweile das Proberty in den Bindings gefunden.
Und die Credentials sind im Service selber vorhanden.


binding.ProxyAddress = new Uri(URL);

ws.ClientCredentials.UserName.UserName = Username;
ws.ClientCredentials.UserName.Password = Password;

Nur weiß ich nicht, ob es auch so richtig ist, denn funktionieren tut es weiterhin nicht!
Gelten die Credentials jetzt für die Verbindung mir dem Webservice?

Deshalb wollte ich wissen, ob jemand einen WCF Service mit einem ServiceClient schon durch einen Proxy angesprochen hat?!

Gruß
Flohen

05.04.2012 - 15:42 Uhr

Achja, falls es jemals wieder einen interessieren sollte.
Hier die Lösung:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace SomeNameSpace
{
    class TerminalServerSupport
    {
        private const int SM_REMOTESESSION = 0x1000;
 
        [DllImport("user32.dll", EntryPoint = ("GetSystemMetrics"))]
        private static extern bool GetSystemMetrics(int nIndex);

        /// <summary>
        /// Gibt den Domänennme zurück.
        /// </summary>
        public static string GetDomainName()
        {
            return SystemInformation.UserDomainName;
        }

        /// <summary>
        /// Gibt an, ob die Anwendung in einer Terminal Session läuft.
        /// </summary>
        public static bool IsTerminalService()
        {
            return SystemInformation.TerminalServerSession;
        }

        /// <summary>
        /// Gibt den angemeldeten Benutzername zurück.
        /// </summary>
        public static string GetUserName()
        {
            return SystemInformation.UserName;
        }

        /// <summary>
        /// Gibt die aktuelle Session ID zurück.
        /// </summary>
        public static string GetSessionID()
        {
            return Process.GetCurrentProcess().SessionId.ToString();
        }

        /// <summary>
        /// Gibt den Maschinenname des Client Systems zurück.
        /// </summary>
        public static string GetClientMachineName()
        {
            IntPtr ptrBuffer = IntPtr.Zero;

            string szClientName = string.Empty;
            int nBytesReturned = 0;

            bool bSuccess = WTSMethods.WTSQuerySessionInformation(
                WTSMethods.WTS_CURRENT_SERVER_HANDLE,
                WTSMethods.WTS_CURRENT_SESSION,
                WTSMethods.WTS_INFO_CLASS.WTSClientName,
                out ptrBuffer,
                out nBytesReturned);

            if (bSuccess)
            {
                szClientName = Marshal.PtrToStringUni(
                    ptrBuffer,
                    nBytesReturned / 2 // Weil der DllImport CharSet.Unicode benutzt
                    );
                WTSMethods.WTSFreeMemory(ptrBuffer);
                int nIndexOfESC = szClientName.LastIndexOf('\0');
                if (nIndexOfESC != -1)
                {
                    szClientName = szClientName.Substring(0, szClientName.Length - 1);
                }
            }

            return szClientName;
        }

        /// <summary>
        /// Gibt das Protocol der Verbindung an.
        /// </summary>
        public static string GetClientProtocol()
        {
            IntPtr ptrBuffer = IntPtr.Zero;

            short nProtocol = -1;
            string szProtocol = string.Empty;
            int nBytesReturned = 0;

            bool bSuccess = WTSMethods.WTSQuerySessionInformation(
                WTSMethods.WTS_CURRENT_SERVER_HANDLE,
                WTSMethods.WTS_CURRENT_SESSION,
                WTSMethods.WTS_INFO_CLASS.WTSClientProtocolType,
                out ptrBuffer,
                out nBytesReturned);

            if (bSuccess)
            {
                nProtocol = Marshal.ReadInt16(ptrBuffer);
                switch (nProtocol)
                {
                    case WTSMethods.WTS_PROTOCOL_TYPE_CONSOLE:
                        szProtocol = "Console";
                        break;
                    case WTSMethods.WTS_PROTOCOL_TYPE_ICA:
                        szProtocol = "ICA";
                        break;
                    case WTSMethods.WTS_PROTOCOL_TYPE_RDP:
                        szProtocol = "RDP";
                        break;
                    default: szProtocol = "No WTS";
                        break;
                }

                WTSMethods.WTSFreeMemory(ptrBuffer);
            }


            return szProtocol;
        }

        /// <summary>
        /// Gibt an in welcher Umgebung die Anwendung läuft.
        /// (Remote oder Console)
        /// </summary>
        public static string GetEnviroment()
        {
            if (GetSystemMetrics(SM_REMOTESESSION))
            {
                return "Remote"; // remote
            }
            else
            {
                return "Console"; // console
            }
        }

        /// <summary>
        /// Gibt die IP-Adresse und die Family des Client Systems zurück.
        /// </summary>
        /// <param name="szAdressFamily">Gibt die Adressfamilie zurück</param>
        public static string GetClientIPAdress(out string szAdressFamily)
        {
            IntPtr pServer = IntPtr.Zero;
            IntPtr pAddress = IntPtr.Zero;
            int nReturned = 0;
            string szIPAddress = string.Empty;

            WTSMethods.WTS_CLIENT_ADDRESS clientAddress = new WTSMethods.WTS_CLIENT_ADDRESS();

            if (WTSMethods.WTSQuerySessionInformation(pServer, WTSMethods.WTS_CURRENT_SESSION, WTSMethods.WTS_INFO_CLASS.WTSClientAddress, out pAddress, out nReturned) == true)
            {
                clientAddress = (WTSMethods.WTS_CLIENT_ADDRESS)Marshal.PtrToStructure(pAddress, clientAddress.GetType());
                szIPAddress = clientAddress.baAddress[2] + "." + clientAddress.baAddress[3] + "." + clientAddress.baAddress[4] + "." + clientAddress.baAddress[5];
            }
            szAdressFamily = ((WTSMethods.AddressFamily)clientAddress.nAddressFamily).ToString();
            return szIPAddress;
        }
    }

    internal static class WTSMethods
    {
        internal static readonly IntPtr WTS_CURRENT_SERVER_HANDLE = IntPtr.Zero;
        internal const int WTS_CURRENT_SESSION = -1;
        internal const int WTS_PROTOCOL_TYPE_CONSOLE = 0;
        internal const int WTS_PROTOCOL_TYPE_ICA = 1;
        internal const int WTS_PROTOCOL_TYPE_RDP = 2;

        internal enum AddressFamily
        {
            AF_UNSPEC = 0,  //(unspecified)
            AF_INET    = 2, //(internetwork: UDP, TCP, etc.)
            AF_IPX     = 6, // = AF_NS (IPX protocols: IPX, SPX, etc.)
            AF_NETBIOS = 17 //(NetBios-style addresses)
        }

        internal enum WTS_INFO_CLASS
        {
            WTSClientName = 10,
            WTSClientAddress = 14,
            WTSClientProtocolType = 16
        }

        //Structure for Terminal Service Client IP Address
        [StructLayout(LayoutKind.Sequential)]
        internal struct WTS_CLIENT_ADDRESS
        {
            public int nAddressFamily;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
            public byte[] baAddress;
        }

        [DllImport("Wtsapi32.dll", CharSet = CharSet.Unicode)]
        internal static extern bool WTSQuerySessionInformation(
            IntPtr hServer,
            Int32 sessionId,
            WTS_INFO_CLASS wtsInfoClass,
            out IntPtr ppBuffer,
            out Int32 pBytesReturned);

        /// <summary>
        /// The WTSFreeMemory function frees memory allocated by a Terminal
        /// Services function.
        /// </summary>
        /// <param name="memory">Pointer to the memory to free.</param>
        [DllImport("wtsapi32.dll", ExactSpelling = true, SetLastError = false)]
        internal static extern void WTSFreeMemory(IntPtr memory);
    }

}


05.04.2012 - 15:38 Uhr

Servus,

sorry das ich diesen alten Beitrag wieder aufrolle, aber mein Problem ist genau das Selbe. Nur mit dem Unterschied, dass ich die Informationen für Proxy und User erst zur Laufzeit bekomme und somit einen Code-Schnipsel bräuchte.

Wie komme ich an die Proxy-Einstellungen und wie kann ich die meinem ServiceClient übergeben?

Kann mir da jemand helfen?

Gruß
Flohen

11.10.2011 - 10:41 Uhr

Vielen Dank für den Tip, aber diese Lösung kannte ich schon.
Bringt mich in diesem Fall nicht weiter, denn um dem User für die URL mit netsh die passenden Rechte zu geben, braucht man wiederrum Adminrechte.
Und zur Installation weiß ich nicht welcher User mein Programm benutzt!

Und den Port 80 darf ich nicht benutzen...warum...keine Ahnung!

Ich hab jetzt einen Workaround gemacht. Meine Businesslogik ist eh vom Server unabhängig und arbeitet mit Events...dadurch konnte ich ohne großen Aufwand die .dll direkt in meinen Client ziehen. Ist unschön, aber es scheint nicht anders zu gehen!

Greetz
Flohen

06.10.2011 - 13:39 Uhr

Hallo Community,

ich habe eine Server/Client Applikation. Wobei die Kommunikation über WCF gehandelt wird. Um genauer zu sein über netTcpBinding.

Ich habe jetzt das Problem, dass der Server erweiterte Rechte braucht um seinen Endpunkt (also die URL) zu reservieren, damit die Clients sich damit anmelden können. In meinem Fall: net.tcp://localhost:8001/Service

Jetzt mein Problem, ich habe leider keinen User zur Verfügung, der dies machen darf. Also keine Adminrechte hat. Leider sagt die msdn in ihrer Problemlösung, dass der Host Adminrechte braucht! Problembehandlung für das Lernprogramm "Erste Schritte" (Punkt 2).

Gibt es irgendeine Möglichkeit dies zu umgehen?
Von mir aus auch eine andere Bindung oder Endpunkt oder sonst was?
Jedenfalls irgendetwas wo man keine Adminrechte benötigt!

Greetz
Flohen

30.09.2011 - 13:50 Uhr

Hallo Community,

ich bin auf der Suche nach .Net Klassen die mir Informationen über die Session auf einem Terminal Server geben. Ich habe das Ganze schon in C++ und da wird die Wtsapi32 benutzt.
Hat das Framework sowas eingebaut?

Ich finde leider keine Informationen dazu.

Oder gibt es andere Möglichekeiten die Informationen, wie:

  • Läuft das Programm auf einem TS?
  • Environment
  • Client Machine
  • Client User
  • Client Addr
  • Client Family (z.B. AF_INET)
  • Client Protocol (z.B. RDP)
  • Client SessionID
  • Domain Name: (bekommt man sicher anders heraus)

Danke schonmal für eure Hilfe!

Greetz
Flohen

10.08.2011 - 17:50 Uhr

Also, da es wohl nicht so aussieht als ob es eine andere technische Möglichkeit gibt, habe ich jetzt 4 Modis eingeführt. In Anlehnung an dem Vorschlag von Equilibrium.
Je nachdem wieviel Fenster tatsächlich vorhanden sind, wird die Aktualisierung verzögert. Ich hoffe das geht mit dem Pflichtenheft konform...
Dürfen sich jetzt andere überlegen was sinnvoller ist! 😉

Nochmal danke für die Antworten und Entschuldigung für meine schlechte Erläuterung des Problems...

10.08.2011 - 15:50 Uhr

Es müssen alle Nachrichten (Strings) angezeigt werden, ohne Verzögerung.

Ich habe die Frage "welche Art von Nachrichten" schon beantwortet.
Oder welche Frage meinst du?

10.08.2011 - 15:07 Uhr

Danke für eure Antworten.
Ich bin nur das ausführende Organ. Ich kann an der Aufgabenstellung nix ändern.

Die Fenster sind schon recht klein, aber es werden alle angezeigt und man kann die letzten 3 Linien erkennen.

Das Programm läuft ja soweit. Alle Nachrichten werden wie gewünsch angezeigt ohne Verzögerung. Nur ist das Programm ausgelastet und der Rechner muss gehörig arbeiten.
Das mit dem "damit Leben können" ist, dass die Rechnerperformance in die Knie geht, nicht das es nicht funktioniert.

Vielleicht hab ich mich da falsch ausgedrückt.
Das Programm funktioniert! Aber es kratzt eben übelst am Limit. Bei einem schwächeren Rechner könnte der schonmal überlastet sein. Einen stärkeren juckt es natürlich noch weniger.

Ich wollte wissen, ob man ein MDI Programm performancetechnisch irgendwie verbessern kann. Mehrere Thread...oder sowas!

Ich hoffe ich habe mich jetzt klarer ausgedrückt!

10.08.2011 - 14:34 Uhr

Natürlich kann kein Mensch die nachvollziehen, aber darum geht es nicht.
Es müssen alle Nachrichten (Strings) angezeigt werden, ohne Verzögerung.

Über den Sinn brauchen wir uns da nicht zu unterhalten. Es geht nur um meine Frage! Wenn es nicht geht, dann geht's nicht, dann muss man damit leben!

@Equilibrium: Die Idee hatte ich auch schon, aber dann werden 10 Texte gleichzeitig angezeigt und das aller 0,5s...das ist noch schlimmer anzusehen als jetzt schon.

@Alf Ator: Das glaube ich nicht, Jim!!! Nicht alles muss sinnvoll sein, aber eben notwendig!

Wie gesagt, wenn es keine andere, technische Möglichkeit gibt, als die Anzeige zu manipulieren, dann werd ich da weiter rumspielen müssen.

10.08.2011 - 13:56 Uhr

Hallo Community,

ich habe leider zu diesem Thema nichts Gescheites gefunden, deshalb hoffe ich ihr könnt mir ein paar Ansätze geben.

Ich habe ein MDI Programm, in dem 120 Fenster geöffnet sind.
Jedes zeigt ein Gerät, dass aller 50ms eine Nachricht abfeuert. Diese wird in eine Listbox in einem Fenster geschrieben.

D.h. 20 Nachrichten pro Gerät / Sekunde = 2400 Nachrichten / Sekunde

Die Aktulisierung der Listboxen frisst unheimlich viel Performance, logisch. Aber ich muss das Fenster aktuell halten.

Hat jetzt jemand von euch eine Idee oder einen Ansatz mit dem ich die Performance steigern kann. Ich denke ich bin nicht der erste der ein solches "Problem" hat...aber ich find dzu nix.

Danke schonmal...

Greetz
Flohen

04.07.2011 - 15:20 Uhr

Weil es eben so ist.
Die Textdatei erzeugt ein anderes Programm, das ist mit Delphi geschrieben.
Lässt sich auch nicht ändern...

@herbivore: Danke, das wollte ich wissen!!! Ich hatte schon so eine Ahnung, dass es sowas geben muss, nur eben nicht gefunden. Schlecht gesucht!! 😉

Greetz
Flohen

04.07.2011 - 14:25 Uhr

Hallo Community,

ich habe da ein Problem und mehrere Lösungsansätze. Nur leider weis ich nicht ob diese funktionieren. Also, zum Problem.

Ich habe eine externe Quelle (eine Textdatei), in dieser stehen Informationen zu Steuerelementen (Typ, Name, Größe usw.), diese möchte ich durchparsen und dann eine eigene Designer.cs erstellen, die dann wiederum in einem anderen Projekt eingesetzt werden soll.
Ich könnte natürlich jetzt mit WriteString oder so eine Datei erstellen die dann Designer.cs heißt. Gibt es jedoch eine andere, eleganter Lösung in .Net?

Ich hoffe ihr wisst worum es mir geht?

Greetz
Flohen

12.05.2011 - 17:19 Uhr

Genau das macht SharpZebra schon. Aber es hat bis jetzt nicht funktioniert.

Ich habe mir den Sourcecode der Library angeschaut und den Fehler gefunden.
Einstellungen die der Entwickler macht, funktionieren bei meinen Drucker nicht.
Dafür hab ich jetzt ein paar Tage gebraucht, aber nun kenn ich mich aus. 😉
Mein Chef war nicht so begeistert, aber was will er machen!!! 😁

Falls also jemand mit der Biliothek was machen will und bei ihm tut es auch nicht, dann kann er mir ne PN schreiben oder hier posten.

Vielen Dank an Lennart, dass du versucht hast mir zu helfen.

Greetz
Flohen

11.05.2011 - 13:26 Uhr

Naja, eigentlich will ich nicht drucken sondern nur den Satenstream speichern und ihn später an den Drucker schicken. Also im Prinzip das Layout speichern.

Ich bin auch offen für andere Möglichkeiten, ich möchte mich aber nicht intensiv mit ZPL beschäftigen.

10.05.2011 - 14:47 Uhr

Danke für die Antwort.

Ich hab da ein paar Infos vergessen.

Ich habe zum testen des Druckers von Zebra den Designer installiert und da funktioniert es einwndfrei. Desweiteren habe ich die Library von neodynamics, ThermalLabelSDK, ausprobiert und dieses funktioniert auch. Leider ist es nicht ganz billig.

Also es muss an dem Code von der SharpZebra Bibliothek liegen, aber da es keine Beispiele oder Dokumentation gibt bin ich ein wenig ratlos.

10.05.2011 - 13:15 Uhr

Hallo Community,

ich trete mal wieder zu euch heran, weil ich im Netz nichts finde.
Da ich hier ein paar Threads gefunden habe, die mit Zebradruckern und zpl zu tun hatten, dachte ich ich schreib mein Problem mal hier hin.
Vielleicht hat ja jemand schon damit zu tun gehabt.

Also, ich habe die Bibliothek SharpZebra von Codeplex runtergelanden, die gepatchte Version (also für zpl): Link

Dann diesen Code, der im Forum drin steht, in meine Applikation kopiert.


byte[] data;
Com.SharpZebra.Printing.PrinterSettings ps = new Com.SharpZebra.Printing.PrinterSettings();
ps.PrinterName = "ZDesigner LP 2844-Z"; //Mein Drucker

List<byte> page = new List<byte>();
               
page.AddRange(ZPLCommands.ClearPrinter(ps));
page.AddRange(ZPLCommands.TextWrite(5, 5, ElementDrawRotation.NO_ROTATION, 10, "Test"));
page.AddRange(ZPLCommands.PrintBuffer(1));                

data = page.ToArray();

new SpoolPrinter(ps).Print(data);

So, mein Drucker fängt jetzt an das Label zu drucken, nur ohne Druck. Also auf dem Label steht nix drauf. Ich hab keine Ahnung was ich falsch mache, da es auch keine andere Beschreibung gibt.

Hat von euch irgendjemand ein paar Beispiele oder mit diesem Problem schon zu tun gehabt?

Greetz
Flohen

04.04.2011 - 10:52 Uhr

Jop. das ist ein Reportviewer-Control und das ist gekauft und fertig.

Ich könnte ja komplett WebForms machen, aber dann geht mir das Unittesting verloren und ich finde das MVC Pattern einfach besser.

Ach ja, für alle, die ähnliche Probleme haben, hab ich was gefunden.

WEBFORM MVC Integration

//Edit: Ach ja, bevor ich es vergesse. Der Vorschlag mit dem iFrame hat funktioniert.
Danke nochmal.

01.04.2011 - 15:14 Uhr

Ok, ich probiere das mit einem iFrame. Ich kann kein Updatepanel benutzen, da ich in der Razor-View-Engine bin.
Die WebForm ist auch nur wegen des Controls, da ich es brauche und nur als WebForm verfügbar ist.

Trotzdem vielen Dank!

Gruß
Flohen

01.04.2011 - 10:17 Uhr

Hallo Community,

ich hoffe die Überschrift trifft es.
Ich habe ein Control eines Drittanbieters das bei einem normalen Aufruf der .aspx Seite super funktioniert.


<a href="Seite.aspx">Seite 1</a>

Da ich aber die Seite in ein div laden möchte, ruf ich einen Ajax Call auf.


$("#AjaxLink").click(function () {
      $("#content").load("@Url.Content("~/Seite.aspx")");
});

Der Aufruf klappt und alles wird so angezeigt wie ich es will, aber das Control hat seine Funktionalität eingebüst. Also es tut nicht mehr.

So, da ich denke, dass es nichts mit dem Control zu tun hat, sondern irgendwas mit dem Lifecycle, frag ich euch. Ich bin noch nicht so lang im Web-Geschäft und kenn mich mit den Details nicht so aus!

Greetz
Flohen

P.S. Ich habe die .aspx Seite in eine MVC Umgebnung integriert, weil ich dieses Control brauche und trotzdem eine MVC Anwendung machen will.

17.03.2011 - 11:22 Uhr

Ich antworte jetzt mal selber.

Also, es ist sicher ein Rechteproblem. Ich hab den Visual Studio Development Server ausprobiert und da funktioniert das erstellen des Com-Objektes.

Ich habe dem AppPool ja die selben Rechte gegeben wie das Visual Studio 2010 hat, nämlich meinen Benutzernamen.
Muss man dem IIS Service noch weitere Rechte geben?

So, und nun um es auf den Punkt zu bringen:

Wo und welche Rechte muss ich umstellen?

//Edit: Hab den IIS Express installiert und auch da funktioniert es einwandfrei. Also liegt der Fehler sicher beim IIS oder besser gesagt bei dessen Einstellungne, aber ich hab keine Ahnung wie die richtigen Einstellungen sind.

17.03.2011 - 10:24 Uhr

Das ist schon passiert. Der AppPool hat meinen Account als Benutzer und somit alle Rechte.
Oder sollte ich einen anderen, loklen Benutzer angeben?

Muss vielleicht in der Com-dll irgendwas bestimmtes stehen, damit ich diese in ASP.Net anziehen kann?

Gibt es eine andere Möglichkeit eine Com-dll anzuziehen, als über Verweise usw.?

17.03.2011 - 09:21 Uhr

Hallo,

ja das kann schon sein. Das hab ich auch schon in einigen anderen Foren gelesen, doch da war meist die Problemstellung eine andere.

Mein Problem ist zusätzlich, dass ich nicht weiß welche Berechtigungen ich setzen muss und vor allem von wem!!??

Kann(st) (du) mir da (einer) helfen?

Greetz
Flohen

16.03.2011 - 19:03 Uhr

Hallo Community,

ich bin mal wieder an einer Problemstelle angekommen. Ich hab jetzt ewig rumprobiert aber es funktioniert nicht.

Ich habe ein MVC 3 Projekt und möchte auf die Methoden einer Com Library zugreifen.
Hab sie vorher in einem WinForms-Projekt ausprobiert und da funktioniert sie.

Angezogen hab ich sie ganz normal, mit Verweis hinzufügen -> Com -> OK

Wenn ich jetzt ein Objekt erstellen will, macht mein Programm nichts mehr. Ich meine er hängt in dieser new BlaBla() Zeile fest. Drück ich auf Pause, steht er gemütlich in der Zeile und macht nüscht.

Leider muss ich diese Com-dll nutzen und ich kann sie auch nicht ändern.

Muss ich was besonderes beachten?
Gibt es noch eine Konfiguration die einstellen muss?

Ich würde mich freuen, wenn jemand sagt: Mensch da musst du noch...

Greetz
Flohen

16.03.2011 - 10:03 Uhr

//Edit: Oh man. Danke für den Hinweis.

Ich bin doch doof. Hab die Lösung die ganze Zeit vor der Nase gehabt und hab sie nicht gesehen. Irgendwie konnte ich die letzten Tagen, das was ich im Internet gefunden habe nicht deuten...

Hier die Lösung (und ich schäme mich):


$(document).ready(function () {  
       var line = new Array();

        @foreach(var item in Model) {
           @: line.push(@item);
        }

        $.jqplot('chart', [line]);
    });

Man kann ganz einfach zwischen Razor und Javascript switchen... mit @ erzeugt man Razor Code mit @: Javascript.

Entschuldigt, aber vielleicht hilft das jemanden der genauso auf dem Schlach steht wie ich!

Greetz
Flohen

15.03.2011 - 18:38 Uhr

Danke, die Artikel sind sehr interessant. Aber so wie ich das verstanden habe, wollen sie nicht nur den Code testen, sondern auch die Bedienung.
Alles sehr komplex, ich versteh zumindest meistens Bahnhof. Bin halt ein Entwickler und kein Tester... 😉

15.03.2011 - 17:57 Uhr

Hallo Community,

ich häng mal wieder seit einiger Zeit an einem Problem.
Ich habe eine Webanwendung auf Basis von MVC3.
Datenbank mit Linq angebunden usw.

Mit Hilfe des JQuery Chart jqPlot möchte ich meine Daten aus der Datenbank anzeigen.
Leider funktioniert es nicht wie ich möchte.

Ich bekomme die Daten ins View und mit alert() kann ich sie auch anzeigen, aber jqPlot möchte mir kein Chart zeichnen. Ich dachte am Anfang es läge am double. Da es im alert() mit Kommawerten angezeigt wird, aber Javascript ja Punkte möchte.
Hab das ganze dann mit string versucht, aber auch kein Ergebnis bekommen.
Er zeigt mir das Chart an, aber ohne Werte.


$(document).ready(function () {  
       var line = new Array();

        @{   
         string message=""; 
         }

        @foreach(var item in Model) {
           message += "line.push(\"" + item + "\");";
        }

        @MvcHtmlString.Create(message);
        alert(line)

        //$.jqplot('chart', [line]);
    });

Vielleicht hat einer schon mit dieser Kombination zu tun gehabt oder ne gute Seite in der man sich mit diesem Problem beschäftigt. Google hat mir leider auch nicht weiter geholfen.

Greetz
Flohen

15.03.2011 - 13:54 Uhr

Nein nein, das hat mit einem Testprogramm zu tun. Wir möchten mit einem Programm andere Programme testen.
Ist ein wenig kompliziert und ehrlich gesagt, weiß ich selber noch nicht wie das am Ende aussehen soll...aber man hat anscheinend irgendeine Vorstellung... 😉

11.03.2011 - 16:23 Uhr

Jop, is mir schon klar.

Aber ne TextBox hat kein SelectedItem, dafür ne ComboBox, ne ListBox etc.

Das mein ich mit gruppieren...

10.03.2011 - 17:04 Uhr

Ja aber caste mal die kompletten WinForms...da hast ja 1000 Zeilen Switch Case...
Ist doch umständlich...und da die meistens selbe Attribute haben, muss man nur noch gruppieren. Das spart ne menge Zeilen Code.
Ob's performanter ist...keine Ahnung...

10.03.2011 - 14:21 Uhr

Danke, danke, ich hab grad gesehen, das PropertyInfo eine Funktion SetValue hat...damit klappt's.

Nochmal vielen Dank.

Greetz
Flohen

10.03.2011 - 14:01 Uhr

Mhhh, also erstmal vielen Dank für euren schnellen Antworten.

Wie ich den Type des objects rausbekomme das hab ich schon gewusst.
Aber ich kann dadurch nicht auf seine Funktionen bzw. die Member zugreifen.

Aber damit habe ich was anderes gefunden. Damit kann ich lesend auf eine Methode zugreifen.
Es gibt auch einen Klasse MemberInfo, damit könnte man sicher auch lesend auf einen Member zugreifen. Aber wie schreibend?

Hat das schon jemand von euch benutzt?


MethodInfo dynMethod = obj.GetType().GetMethod("EineMethodeDiesesObjekts", bindingFlags.NonPublic | BindingFlags.Instance);

ni = (int)dynMethod.Invoke(obj, null);

10.03.2011 - 11:30 Uhr

Hallo Community

Ich hab da ein Problem.

Ich habe zur Laufzeit ein object von dem ich nicht weiß was es ist.
Dazu habe ich in einem string den Typ des Objekts hinterlegt.

Ich bekomm also eine TextBox als object und im string steht "System.Windows.Forms.TextBox".

Gibt es eine Möglichkeit einen Cast oder eine Konvertierung zu machen, damit ich auf die Funktionen zugreifen kann? Fragt mich bitte nicht warum ich das so bekomme. Ich hab das nicht gemacht und muss es nur weiterentwickeln.

Gruß
Flohen

02.02.2011 - 17:46 Uhr

Vielen Dank!!!!

Einen Timer, man daran hab ich jetzt überhaupt nicht gedacht...man man man...

Vielen Dank nochmal! Ihr habt mir meine Nerven zurück gebracht! 😉

02.02.2011 - 16:37 Uhr

Hallo,

ich bin relativ neu in der Webentwicklung und hab da jetzt ein Problem.
Ich arbeite mit ASP.net 4.

Also:
Ich habe eine GridView und ein SQLDataSource Objekt. Über das Datasource-Objekt hole ich meine Datenbank heran und füge dann diese als Datenquelle ins GridView. Soweit ganz einfach.
Nur wird natürlich eine Änderung in der Tabelle erst wieder angezeigt wenn ich die Seite neu lade oder mit AJAX (Updatepanel) das GridView mit DataBind() aktualisiere.

Ich möchte das ganze aber automatisch machen (natürlich wenn's geht über asynchrone Verarbeitung), so das ein User der die Seite anschaut nicht klicken muss und trotzdem auf dem neuesten Stand ist.
Jetzt hab ich schon einiges über AJAX/jQuery und Reverse AJAX und Comet und hast du nicht gesehen alles gelesen. Das ist mir aber alles zu kompiziert. Ich will doch eigentlich nur ein Aufruf machen: Gridview.DataBind()

Und mit dem Updatepanel brauch ich ein aktives Handeln des Users oder gibt es eine andere Möglichkeit?
Das GridView Objekt habe ich auch schon mit AJAX und jQuery an meine CodeBehind-Datei übergeben, doch das funktioniert nicht...warum weiß ich auch nicht so genau.

So ich hoffe ihr habt mein Problem verstanden und könnt mir helfen.
Gegoogelt hab ich schon und auch hier im Forum gesucht, aber leider nix gefunden.

Greetz
Flohen

14.01.2011 - 10:22 Uhr

Hallo Community,

ich greife dieses Thema wieder auf, weil ich momentan in einer ähnlichen Situation bin.
Nur soll ich rusfinden, ob es Möglich ist WinForms in ASP.Net zu konvertieren.

Das Codeprojekt-Projekt ist nicht schlecht für kleine, simple Anwendungen.
Doch für umfangreiche, große Anwendungen brucht man AJAX um performant zu sein.

Ich hab da das Visual WebGui gefunden, das angeblich einen Großteil konvertieren kann und nur wenig manuell nchbearbeitet werden muss.
Aber ich hb noch nicht rausgefunden wie die automtische Konvertierung funktioniert.
Ich denke, dass sie sich das zahlen lassen, aber ich hab keine Hinweis daruf gefunden.

Hat das jemand schon benutzt oder kennt es irgend woher?

Die Homepge

Die Seite, aus der sie sagen sie könnten konvertieren