Laden...
O
oehrle myCSharp.de - Member
E-Technik Germany Dabei seit 08.06.2009 461 Beiträge
Benutzerbeschreibung

Forenbeiträge von oehrle Ingesamt 461 Beiträge

19.08.2011 - 14:30 Uhr

Hallo, habe das getestet, das funktioniert. Habe eine dataTable nur mit der Struktur geklont, diese übergeben. Jetzt habe ich aber noch ein Problem. Ich möchte eine Spalte hinzufügen. das dgeht auch,aber die neue Spalte wird in der Tabelle am Ende angefügt, die soll aber an Spaltenposition 0 in der Tabelle stehen. Kriegs nciht hin, wie bekoome ich das hin?

19.08.2011 - 12:23 Uhr

DataGridRow row =

(DataGridRow)dgridname.ItemContainerGenerator.ContainerFromIndex(1);

oder

DataGridRow row = (DataGridRow)dgSuchdaten.Items[0];

Probier mal.

18.08.2011 - 07:07 Uhr

FZelle, danke für den Tipp. Genau das wollte ich hören, wie ich da genau ansetzen muss, das hilft mir weiter.

17.08.2011 - 16:02 Uhr

Ok, dann mal zu meinem Problem. Ich habe eine View von einem SQL-Server vorliegen. In dieser View sind ca. 60.000 Datensätze mit ca. 50 Spalten. Diese Spalten haben Kürzell (Abkürzungen). Diese Kürzell sind nicht Aussagekräftig und denen (also dem Header der Spalte) muss ein Aussagekräftiger Name verpasst werden. Beim Start werden alle Datensätze in ein DataGrid geladen.
Unter dem DataGrid soll ein zweites,identisches DataGrid entstehen, mit 4 Zeilen.
Die erste Spalte von jedem dieser 4 Datensätze muss ein Suchoperator rein (>,<,==, LIKE). Dann kann der User in jede Spalte einen Wert eingeben. Dann drückt er einen Button und ich werte das unter DataGrid aus und setze die Suchabfrage ab. Die gefundenen Daten werden wieder im oberen DataGrid angezeigt.
Mein DataGrid mit den Daten und den neuen Headenamen habe ich schon per XAML erzeugt, das funktioniert. Wie bekomme ich jetzt das zweite nach eurer Idee hin, ohne das Datensätze mit Daten eingestellt weren und die Suchoperatoren drin sind?

17.08.2011 - 15:33 Uhr

Ja, danke erst mal. Ich werde das mal heute abend noch testen. Hast baer nich doch noch einen Tipp, wie ich das Zeug dynamisch reinschreiben kann? Ich meine ich könnte eine Collection erzeugen. Aber da müssen die Headerspalten einer anderen Tabelle rein. Evl. hast eine Idee, sonst probeir ich nochmal.

17.08.2011 - 14:50 Uhr

Hallo, beschäftige mich gerade mit dem DataGrid. Ich habe ein DataGrid per codebehind mit Spalten gefüllt, die ich aus einer Liste habe. Dann habe ich leere Datensätez einegefügt. Nun muss ich noch in die eingefügten Datensätze in Spalte 0 einen bestimmten String einfügen. Ich komme aber irgndwie nicht an den Datensatz und die Spalte ran. Normal müßte man doch mit DataGrid.Items[x] auf den betreffenden Datensatz zugreifen können. Dann muss ich an die Spalte ran. Kann mir da jemand mal ein Tipp geben? In den meisten Beispilen ist das alles immer nur in XAML beispielisiert, nicht per Code. Wie geh ich da vor?

20.07.2011 - 08:53 Uhr

Hallo, ich habe gerade ein Problem mit Point. Ich möchte in einer Klasse Properties als Point verwenden.


public class Konturzug
{

private Point strtpkt;

public Point Startpunkt
        { 
            get { return strtpkt; }
            set { strtpkt = value;}
        }
}

Wenn ich nun in einem Programmteil die Point-variablen X und Y mit Daten belegen möchte, geht das nicht > Fehlermeldung:

Connot modify the expression, because its not a variable

Beispiel:


kontZug.Startpunkt.X = abstandx;

Was muss ich dabei beachten? Das muss doch so möglich sein?

12.07.2011 - 16:50 Uhr

Hallo, so sieht's aus:

Resourcen:

 <Window.Resources>
        <vm:MainViewModel x:Key="mainViewModel"/>
        <ll:NumberConverter x:Key="converter"/>
    </Window.Resources>

 <TextBox Name="tbx_Rotationswinkel" Width="80" Grid.Column="1" Grid.Row="12" VerticalAlignment="Center" IsReadOnly="True" Text="{Binding Path=WkzDatenCol/RotationsWinkel,Converter={StaticResource converter},ConverterParameter='#.###'}" />

Meine Implementierung von INotifyPropertyChanged:


namespace Wpf_Rotation.ViewModel
{
    public class ViewModelBase : INotifyPropertyChanged 
    {
        public event PropertyChangedEventHandler PropertyChanged;

        protected void OnChanged(string propertyName)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}


 public class Werkzeugdaten     : ViewModelBase, IValueConverter
    {

        public int NutenZahl { get; set; }
  
        public double RotationsWinkel { get; set;} 

        internal void BerechneRotWinkel()
        {
            RotationsWinkel = NutenZahl * 100;
        }



        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }



Soweit erst mal. Kann da jemand einen Fehler erkennen?

12.07.2011 - 16:30 Uhr

Hallo, nun mit einem neuen Thread. es geht um das Thema ValueConverter.
Ich arbeite mich mich noch in WPF ein und versuche mich gerade an MVVM, da das gerade in mien kleines Projektchen passt. So, ich habe ein Beispiel aus einem Buch genommen, und das mal versucht auf mein Programm umzumünzen. Geht erst mal soweit das alles läuft. ICh habe eine Klasse, die Daten kapselt. AUs den Daten wird etwas berechnet. Das wird dann in der gekapselten Datenklasse einer Property zugeordnet. DIese Property ist auch an eine TextBox im WIndow gebunden. Wenn ich den Wert über eine Button-Click anstosse (es wird ein Command aufgerufen), wird die Property berechnet, aber in der TextBox erschein einfach kein Wert. Was mache ich falsch, oder worauf muss ich noch ein Augenmerk legen?

12.07.2011 - 12:13 Uhr

Hallo, ich versuche im Moment zusätzlich MVVM zu verstehen. Da es sich für meine Anwendung anbieten würde (da Anwendung überschaubar).
Nun habe ich mir nach längerem Lesen ein Beispiel geschhnappt, und versuche meine Anwendung anzupassen. Erst mal läuft alles so weit. da ich TextBoxen habe und intern BErechnungen durchgeführt werden, muss ich nocheinen Converter einbinden. Meine Berechnungsmethode (erst mal zum testen) habe ich auch in der Klasse welche die Daten kapselt. Ist das so OK? Oder BEechnungen in eine statische Klasse auslagern? Dann noch zum Aufruf der BErechnungsmethode. Macht man das in der Regel über ein Command, oder ist das falsch?

08.07.2011 - 10:04 Uhr

Supi, das passt. Danke dir. Jetzt muss ich noch ein DataTemplate erstellen.

08.07.2011 - 09:41 Uhr

Ich habe aber nun ein Problem mit dem DataGrid. Ich benenne die Headerspalten um, mache aber mit Binding die Zuordnung zu de Bezeichnungen von der Tabelle im DataSet. Nun werden die Spalten alle korrekt angezeigt, mit den anderen "Namen" die ich zugewiesen habe. Nach diesen Spalten werden dann alle Spalten der Tabelle nochmals angezeigt, aber mit den Spaltennamen aus der DataSet-Tabelle. Wie bekomme ich die weg?

Hier mal noch die Übergabe an den DataContext:


public MainWindow()
        {
            InitializeComponent();

            //// dataSet und TableAd.-Instanz ertsellen
            dSet = new SQL_ReconditioningDataSet();
            heliTadap = new ParamHeliTableAdapter();

            //// Daten laden
            heliTadap.ClearBeforeFill = true;
            heliTadap.Fill(dSet.ParamHeli);

            //// DataView intanziieren und befüllen mit Filtervorgabe
            dView = new DataView(dSet.ParamHeli, "(PRAPA = -8000) OR (PRANR < 1000000 AND PRAPA = 0)", "ABM1,PDL", DataViewRowState.OriginalRows);

            //// DataView dem globalen DataContext übergeben
            this.DataContext = dView;
        }
07.07.2011 - 22:13 Uhr

Ja, die Lage ist beschissen, aber nicht "hoffnungslos" 🤔 Bin gerade am probieren. Ich denke auch, das es fürs erste tut, wenn ich Select-Strings zusammenbaue und dann im EF oder DataSet absetze. Ich denke damit kann ich am flexibelsten reagieren. Diese daten muss ich dann halt immer einem DataContext oder einer *.ItemSource zuweisen.

LinQ hat da wohl auch wieder eher das Problem mit zusammengestzten Such-Strings. die ich nicht übergeben kann (ich habe so etwas jedenfalls noch nicht gesehen).

Habe nun außerdem noch festgestellt, das die gute alte DataView verwendet werden kann, da funktiooneirt ja auch der RowFilter, cool.

07.07.2011 - 21:33 Uhr

Danke für die Info. Habe mir das durchgelesen, klingt auch gut mit der automatischen aktualisieurg der daten und der völlig entkoppelten Visualisierung. Um das anwenden zu können oder zu beherrschen, muss ich mich wohl noch sehr weit rein knien. Ich würde das schon sehr gerne beherrschen !!
Nun aber muss ich sehen, dass ich erst mal eine Oberfläche für die Filterung der daten hin bekomme. Ich könnte das ja in WinForms machen, möchte aber in die neue Technik umsteigen !! Nun, es steht ja auch noch der Zeitdruck dahinter. Es gibt wohl unterschiede beim Filtern. Bei der BindingListCollectionView.CustomFilter kann man wohl nicht alle Quellen verwenden. Wenn ich aus einer Datenbank eine EF-Klasse erstelle und dann die Tabelle beim Laden der Oberfläche dem DataContext zuweise, kann diese anschleidend nicht gefiltert werden. Verwende ich ein DataSet (die Datenabank), dann kann ich filtern. Wie gesagt, bei WPF gibts viel mehr Umfang und das ordentliche zu finden (auch über Google) ist nicht immer so einfach.

07.07.2011 - 16:48 Uhr

Hallo, ich arbeite mich seit längerem in WPF ein, habe davor mit den WinForm gearbeitet.
Nun habe ich eine Datenbank, von der ich daten aus einer View oder Tabelle auslese. Diese Daten würde ich gerne in Textboxen darstellen. Darin kann der User dann die Daten editieren und über diese Werte dann genauer filtern. Ich brache aber eine View wie bei Win Form die DataView, der ich dann einfache den Select-String übergebe. Und da haperts. Wie gestalte ich das mit der DataView? Ich muß die Daten aus der Tabelle ineine View kriegen, die dann zusätzlich an ein DataGrid gelangt, zur Visualisierung. Ich denke, wenn ich da mal ein paar Einblicke habe, kann ich probieren und so manches wird etwas schlüssiger in WPF für mich werden.

16.05.2011 - 08:02 Uhr

Hallo David, sorry, aber WPF ist erst mal nicht so einfach. Ich wollte wissen, ob ich komplette Spalten mit ihren definierten Rows ausblenden (oder besser gesagt mit anderen Controls überlagern) kann, somit hätte ich mit ein Abfrage-Dialog mit einem Fenster bauen können. Im oberen halben Grid hätte ich gezeichnet, im unteren drittel wären die Abfragen gelaufen für Winkel, Radien, Geraden usw. Habe das aber gelassen und mit drei kleine modale Fenster für die Abfrage erstellt. Das mit der Grössenabfrage passt nun auch. Das eingebettete Grid
im Grid schrumpft und wächst korrekt mit Vergroessern und verkleinern des Window. Das Problem lag wohl mit dabei, bei der Transformation. Die Groessenabfrage und zuordnungen hole ich mir nun erst wenn das Window "Loaded" ist.
Allerdings habe ich nun eine andere Schwierigkeit. Ich zeichne ein Fadenkreuz in das Grid. Wenn ich das Window verkleinere, bleibt das Fadenkreuz nicht vertikal zentriert. Ich habe mal eine Linie von links oben nach rechts unten gezeichnet. verkleiner ich das Window, bleibt es zwar links oben in der Ecke korrekt, aber unten rechts bleibt die Linie nicht in der Ecke, sondern wandert nach links aus der Ecke heraus. Ich habe vesucht in "Size_Changed"-Event das abzufangen, und zu verschieben. Eigentlich müßte ich doch nur den Nullpunkt von X und Y neu berechnen und übergeben, oder?

10.05.2011 - 15:43 Uhr

Hallo, wenn ich ein Grid habe, mit mehreren Rows und Spalten, wie kann ich in der Code-Behind die Ganze Spalte mit ihren Rows oder nur eine Row in einer Spalte unsichtbar machen?
Bei StackPanel gibts das Visibility.

06.05.2011 - 08:41 Uhr

Das heißt also, um die daten von cnv_ZEichnen zu bekommen muß ich die Daten von Parent abfragen? Das Ding steckt in einem StackPanel.

06.05.2011 - 07:13 Uhr

Hallo, wenn sich das Window im Konstruktor befidnet und die Initialiaze() abgearbeitet ist, dann kann ich mit cnv_Panel.Arrange() das Rect abfragen. Da sind die Werte aber auch überall 0.0
Muß ich die Werte an einer bestimmten Stelle oder Ereignis abgreifen?

05.05.2011 - 13:39 Uhr

Hallo, danke erst mal aber das funktioniert nicht. Ich habe das Window nun mal öffnen lassen, ein paar mal Ereignisse von Buttons abgearbeitet und dann ein mal einen BreakPoint gesetzt un die .ActualWidth oder nur die Width abzurufen. Ohne Erfolg, .ActualWidth ist 0.0

Im XAML-COde habe ich das Panel mit Height = "Auto" gestellt. Mache ich dort feste WErte rein ist das Panel nicht mehr dynamisch.

05.05.2011 - 11:41 Uhr

Hallo, ich habe eine Oberfläche mit verschiedenen Panel erstellt. je nach Änderung der Größe des Fensters wachsen die Panels mit oder schrumpfen. Wenn ich die Oberfläche starte und in ein Panel zeichnen möchte, will ich sofort genau in der Mitte mit dem Zeichnen beginnen. Wenn ich aber das Control sofort nach dem Initialisieren im Konstruktor abrufe, bekomme ich immer nur "NAN". Es muss doc hmöglich sein an die Angaben ran zu kommen. Wie muss ich da vorgehen?

27.04.2011 - 11:55 Uhr

Hallo, habe das erst mal eingefügt, um in der DataTable die Rows zu kennzeichnen, welche später farblich hervorgehoben werden müssen.

dann habe ich vorerst mal das DataGrid.loadingRow-Event aktiviert, bei der ich dann die Rows einzeln beim Laden abfange und dann die Background-Farbe setzte. Ich muss mir das von euch beiden genau ansehen, das macht die Sache schon einfacher. Aber mein Manko ist, das diese Dinge in meinem Programm dynamisch erstellt werden (im C# Code) und ich somit auch diese Dinge in C# codieren muss. Diese Anzeigegeschichte könnte ich evtl. aber auch in XAML machen, muss ich nochmal durchprüfen.

26.04.2011 - 23:12 Uhr

Hallo, ich arbeite mich nun auch in WPF ein. Jetzt habe ich eine Anwendung nachgebaut, die zuvor in WinForm erstellt wurde. Ich übergebe daten aus einer dataTable in ein DataGrid. Die Tabelle hat drei Spalten (Bezeichnung, spalte1, spalte2).

Wenn die Daten über dataContext an das dataGrid übergeben wurden, möchte ich jede Row im DataGrid ab Row[1] durchlaufen, und die Werte von spalte1 mit spalte2 vergleichen. Bei Differenzen solleb beide Zellen (also spalte1 + spalte2) rot markiert werden.


 DataGrid dg = new DataGrid();
            dg.ItemsSource = tbl.DefaultView;
 
            for(int m = 1; m < dg.Items.Count; m++)
            {
                dg.Items.MoveCurrentToNext();
                DataGridRow dgrow = dg.Items[m] as DataGridRow ;
               
            }

Leider ist erstmal meine dgrow immer null. Wie muss ich das angehen?

20.03.2011 - 21:35 Uhr

Hallo, natürlich habe ich das integriert, in einem try..catch-Block


try
                {
                    _sqlcmb = new SqlCommandBuilder(_arSqladap[i])
                                  {
                                      SetAllValues = true,
                                      ConflictOption = ConflictOption.OverwriteChanges
                                      //ConflictOption = ConflictOption.CompareRowVersion
                                  };
                    _arSqladap[i].Update(_MVDataSet.Tables[i]);
                }

Tja, und jetzt habe ich gerade noch das .AcceptChanges() weggelassen, und siehe da es geht. Das .AcceptChanges() setzt mir ja die editierte Zeile wieder auf "unchanged", womit sie beim Update der Datenbank nicht erfasst werden kann.

20.03.2011 - 13:28 Uhr

verwendetes Datenbanksystem: <SQLEPRESS2008>
Ich habe eine DataRowView (Master-Einstellung für die zu editierenden DataRow's) von der ich die Spaltenwerte in andere DataRow's übernehmen möchte.

Vorgehensweise: Ich ändere erst die DataRowView (dient dann als Master-Spaltendaten). Dann nehme ich mir die DataRow's vor, die ich editieren möchte. Ich suche in der DataTable mit Select die DataRow und duchlaufe die Spalten in einer Schleife. Dabei übergebe ich die Daten der DataRowView an die DataRow. Nach dem Durchlauf wird mit .AcceptChanges() die Änderungen der DataRow übernommen. Sind alle DataRow's editiert, wird mit Hilfe des CommandBuilders die Änderungen vom DataSet in die Datenabnk gespeichert. Im Anhang mal Code mit der PRoblematik.

Das Problem ist, die Änderungen kommen in der Datenbank nicht durch. Ich versteh aber nicht warum. Wenn ich debugge, dann sehe ich wie die Daten in die DataRow übernommen wurden. Da muß beim aktualisieren irgendie auf falsche Werte zugeriffen werden.


if (_editMode)
                            {
                                //// Bemerkung: Hier bei 2. Tag beginnen, der erste wird als Master verwendet
                                for (int m = 1; m < _auswahlTage.Count; m++)
                                {
                                    /// Zu editierende DataRow suchen (nach Datum, das gibts nur einmal in der Tabelle)
                                    DataRow[] rw = _MVDataSet.Tables[i].Select("Datum = '" + _auswahlTage[m] + "'");
                                    rw[0].BeginEdit();

                                    //// Die daten der Master-DataRowView an die DataRow die zu editieren ist übergeben
                                    for (int n = 1; n < drv.Row.ItemArray.Length; n++)
                                    {
                                        /// Diese beiden Spalten werden übergangen
                                        if ("Anderungszeit" == rw[0].Table.Columns[n].ColumnName)
                                            continue;
                                        if ("Datum" == rw[0].Table.Columns[n].ColumnName)
                                            continue;

                                        rw[0][n] = drv[n];
                                    }
                                    rw[0].EndEdit();
                                    /// Änderungen der DataRow übernehmen (Proposed mit Current-Werten ersetzen)
                                    rw[0].AcceptChanges();
                                    
                                    GetVerbrauchsdaten(i, _auswahlTage[m]);
                                }
                                /// Tabelle mit Änderungen übernehmen
                                _MVDataSet.Tables[i].AcceptChanges();
                            }

Hat jemand die zündende Idee, warum das nicht funktioniert?
Wenn ich Standardmäßig nur einen datenstz ändere, dann klappts. Kann das noch irgend etwas mit den Proposal und Current-Daten zu tun haben?

20.03.2011 - 10:57 Uhr

Hi, danke. Habe es ausprobiert. Wenn ich das an eine BindingSource übergebe, diese an ein DataGridView hänge, funktionierts. Prima. Wieso das mit dem anonymen Typ genau so ist, das habe ich noch nicht begriffen.

17.03.2011 - 09:12 Uhr

Hallo, seltsam das du einen anderen Datentyp im DataSet als in der Datenbank selber hast. Ist das ein typ. DataSet oder nicht ? Falls nicht, übernimmst du zuerst das Schema der Datenbank

TableAdapter.FillSchema(DataSet, SchemaType.Source, "TabellenName");

??

16.03.2011 - 23:14 Uhr

verwendetes Datenbanksystem: <SQLEXPRESS2008>

Hallo, ich tu mir etwas schwer mit LinQ. Ich habe vor längerer Zeit schon etwas damit gearbeitet, habs dann aber wieder ruhen lassen. Ich arbeite de öfteren mit Datenbanken, und verwende dazu das ADO.Net, eigentlich fast immer in VErbindung mit einem DataSet.
Jetzt hatte ich gesehen, das man damit auch schon was in nicht typisierten dataSets (Tabellen) abfragen kann, und habe das natürlich auch sofotz probiert. Hier meine PRoblemfall:



 DataTable tbl = _MVDataSet.Tables["PSSMaschinenliste"];  // aus DataSet die Tabelle zuweisen
            var suche = from p in tbl.AsEnumerable()
                        select new {name = p.Field<String>("Bezeichnung"), abluft = p.Field<Double>("Abluft")};


            dgv_Hinweise.DataSource = suche;  //.CopyToDataTable() gibts hiier nicht, .AsEnumerable() auch nicht. 

Warum kann ich das suche-Ergebnis nicht dem DataGridView zuzordnen? Wenn ich n ur
select p;
angebe, dann funkionierts und ich kann mit .CopyToDataTable() arbeiten. Ich möchte aber nicht alle Spalten der Tabelle anzeigen, sondern nur ein paar ausgewählte.
Wie muss ich da vor gehen?

22.02.2011 - 09:19 Uhr

Ja, diese Körper kollidieren (der eine streift den anderen). Nun wie macht man so eine Echtzeitsimulation?
Ich würde gerne so etwas wie eine Werkzeugsimulation machen (Dreh- oder Schleifbearbeitung). Welche Tools nimmt man dazu?
WIe gesagt, die Bahn, wie der Bearbeitungskörper an dem anderen Körper (Werkstück) entlang fährt, ist vorgegeben. Das Werkstück dreht sich evtl. in vorgegeben Winkelschritten.

21.02.2011 - 21:30 Uhr

Hallo, damit meine ich die Zone, in der sich beide Körper berühren oder überschneiden wenn sie aneinander vorbei bewegt werden.

20.02.2011 - 10:44 Uhr

Hallo, ich möchte einen 3D Körper an einem anderen 3D-Körper (Zylinder) vorbei bewegen. dabei soll die Kontaktzone die an dem zylinder entsteht, am Zylinder abgerechnet werden. Nun, wie macht man so etwas am geschicktesten (dazu noch schnell in der Bearbeitung, und evtl. nicht z uzeitaufwendig und kompliziert 😉 )??
Könnte man die Bahn die man berechnet hat einem CAD-System übergeben, damit dieses die Simulation übernimmt?
Oder gibt es für solche Simulationen fertige DLL's? Ich habe in dieser Richtung noch nichts gefunden. Evtl. hat im Forum jemand Erfahrung mit solchen Experimenten. Eigentlich ist das doch genau das gleiche wie an Werkzeugmaschinen, da werden ja auch solche Sachen simuliert. Vielleicht hat dazu jemand eine Idee.

20.02.2011 - 10:35 Uhr

Hallo Knuffi, also ein kleiner Tipp. Du kannst mit GDI+ auch 3D zeichnen (Gitterform).
In dem Buch "Visual C# 2008" von Doberenz und Gewinnus gibts dazu was. Über die Transformation kann man dann die Körper drehen und zoomen. Evtl. mal nachschlagen (nur mal als Anregung).

18.02.2011 - 17:22 Uhr

Sieh fogender Link:
http://drawing3d.de/Tutorial/HelloWorld.aspx

Aber noch etwas. Gibt es bei WPF eine Grafik-DLL in der man 3D Objekte aneinander vorbeiziehen läßt, und dann dabei die Kontaktzonen abgerechnet werden? Hat da jemand Erfahrung damit, wie man so etwas macht?
Ich bräuchte das für eine Simulation, damit ich einen Körper einer berechneten Bahn im raum folgen lassen könnte. Wenn er dabei den anderen Körper berührt, sollte er davon die Kontaktzone abrechnen.

13.12.2010 - 17:02 Uhr

Hi Witte, ich glaube es geht doch einfacher. Ich bin mir nicht sicher ob das funktioniert wenn ich das so programmiere. Hast du das schon so gemacht? ICh denke ich kann die row nachher nicht direkt auf ihre Properties ansprechen

int durchmesser = row.Durchmesser;

double winkel = row.winkel:

....

Ich habe etwas anderes. Ich werde dem TabelAdapter im DataSet einen neuen hinzufügen, der aber die Daten aus der andern strukturgleichen Tabelle liest.
Mal sehen ob das funzt.

13.12.2010 - 12:48 Uhr

Hallo Witte, ich würde schon gerne bei ADO.Net bleiben.

Ich habe im DataSet.Designer.cs rumgeschnüffelt und die Typ.DataTableRow-Klassen gesucht. Ich habe dort auch eine Methode eingefügt.

Bei dir sieht das so aus, als müsste man Daten in der Methode ToTableBRow()
der neuen row zuweisen. Dann muss ich die Daten erst wieder manuell zuweisen.
Meinst du das so?

11.12.2010 - 17:33 Uhr

verwendetes Datenbanksystem: <SQLEXPRESS 2008>

Hallo, stehe grad vor folgendem Problem: Ich mache Berechnungen und frage dazu Daten aus einer Tabelle ab, die als typ. DataSet eingebunden ist.
Nun muß ich genau eine strukturidntische Tabelle zusätzlich erstellen, weil ich bestimmte Informationen eben getrennt (deshalb nun zwei Tebellen) ablegen muss.

Nun möchte ich ja wie bisher die typisierte DataRow die ich nach der Suche zurück bekommen habe weiterhin in meiner Klasse verwenden. Jetzt hab ich halt zwei identische Tabellen, und ich kann die Row der neuen Tabellen nich in die Row der anderen stecken und an die Klassen übergeben, die ich verwende.

Nun, wie mach ich das am einfachsten ohen viel Code dazustricken zu müssen? Schnittstelle anlegen, oder gibts da noch etwas anderes damit ich mit zwei Tabellen arbeiten kann?

07.12.2010 - 11:48 Uhr

Hallo, ich greife über die OleDB-Verbindung zu.

Das Problem hat sich nun gelöst. Daten lesen war war kien Problem, nur Datensätze editieren und neu anlegen. Es war ein BErechtigungsproblem, diese Maschine war nicht in der Domain eingegliedert, hatte aber Leseberechtigung.
Nun funzt das, echt cooool.

07.12.2010 - 09:07 Uhr

verwendetes Datenbanksystem: <Access 2003>

Hallo, folgendes Problem. Wir haben Maschinen mit WINXP (SP3 installiert).

Auf der Maschine ist kein MS-Access installiert. Es sollen aber Daten in eine Datenbank von der Maschine aus eingefügt werden. Habe mir nun in C# eine Oberfläche gebaut, die die Daten in einem DataGridView anzeigt. Da können dann neue Datensätze eingefügt werden. Das funktioniert von meinem Rechner einwandfrei (ich habe auch Access drauf). Aber von der anderen Maschine funktionierts nicht. Ich werde gleich noch den genauen Fehler bringen.
Aber nun, ich habe das Programm auf einem driten Rechner getestet, der auch kein Access installiert hat. Da hat es geklappt. Kann es sein das da noch irgendwelche ODBC-TReiber installiert sein müssen, damit man auf Access-DB's zugreifen kann ohen Access-Installation?

23.11.2010 - 14:53 Uhr

Muss ich erst mal prüfen, ob ich davon was zu sehen bekomme, da ich eine fremde DLL eingebunden habe (Verweis).
Das ist bestimmt nicht so einfach...
Werd ich prüfen und BEscheid geben.

23.11.2010 - 10:39 Uhr

Hallo, ich habe Com-Objekte in aus einer C-DLL in mein C#-Projekt eingebunden. Das hat ja nun geklappt. Dann waren Methoden mit einfachen Zeigern auf Variablen oder Arrays zu verwenden, das habe ich auch mit unsafe und fixed hinbekommen.
Nun aber mein großer Stolperstein. ICh habe diesen C
-Code:


// Pos holen und besücken...
			CComPtr<IISBEcomGdxContent_TpPos> l_pTpPos;
			int l_iTpPosCount = 0;
			l_pTp->Tp_PosGetCount(&l_iTpPosCount);
			l_pTp->Tp_PosGetObjFromIndex( l_iTpPosCount - 1, GDXIID_CONTENT_TPPOS, (LPUNKNOWN*) &l_pTpPos);

Wie setze ich das in C# um??


gdxContent_TpPos = new ISBEcomGdxContent_TpPos();

                        int iTpPosCount = 0;
                        gdxContent_Tp.Tp_PosGetCount(out iTpPosCount);
                        gdxContent_Tp.Tp_PosGetObjFromIndex(iTpPosCount - 1, "", gdxContent_TpPos);  /// Wie übergebe ich hier???

Wie mach ich das nur? Im Netz habe ich dazu auch noch nichts brauchbares gefunden.

20.11.2010 - 10:23 Uhr

Ich benutze WinXP, aber demnächst auch Win 7.

20.11.2010 - 10:02 Uhr

Hallo, habe gestern abend schon im Netz gestöbert, aber nicht passendes gefunden. Ich möchte je nach Zustand (was in meinem Programm passiert) das Taskleistenelement von meinem PRogramm die Hintergrundfarbe wechseln, oder blinkem lassen. Wo wird das eingestellt. Es gibt da zwar die Klasse Taskbar, aber die scheint damit nichts zu tun haben.
Kann mir jemand einen Tip geben wo ich was dazu finde?

05.11.2010 - 08:37 Uhr

Hallo, ich habe die REgistrierung mit regsrv32 zwar durchgeführt, ob die aber wirklich durchgeführt wurde (Erfolgsmeldung kam), weiß ich nicht wie ich da prüfen kann. Das muß ich dich in der Registry nachschauen können. Aber wo??
Ich habe auch schon in Foren gegoogelt, aber nicht gescheites gefunden.

Ich deklariere die Klasse in meiner Form, und dann wird die im Konstruktor der Form instanziiert.
Eine andere Klasse, mit der ich experimentiert habe, die auch in dieser DLL ist, funktioniert. Kann das mit den Pointern zusammenhängen, die in dem MEthoden drin sind, da diese DLL aus einem CPP - Projekt entstanden ist??

04.11.2010 - 16:04 Uhr

Hi, mein Fehlercode lautet

-2147221164

Wo finde ich dazu etwas??
Ín meiner DLL steht dazu nichts.

04.11.2010 - 12:58 Uhr

Hallo, kann mir jemand sagen wie ich genau eine DLL einbinde, die in C++ erstellt wurde? Ich habe die DLL, und eine TLB-Datei. Wie ich soeben gelesen habe, wird die TLB-Datei bei C++ erstellt.
Ich habe die DLL in meinem PRojekt unter "Verweise" eingebunden, habe dann einach mal probiert, eine Klasse (Inetrface) zu instanziieren und damit zu arbeiten. Hat funktioniert. Dann wollte ich eine andere Klasse (Interface) instanziieren und damit arbeiten. Bei der Instanziierung kommt dann die COMException.
Habe dann im Inetrnetz nachgesehen, da hatte es oft Probleme mit BEnutzerrechten gegeben, weil die Programme auf anderen rechnern laufen sollten. Das ist bei mir erst mal nicht der Fall.

Ich habe dann die DLL auch mit regsrv32 registriert, das hat aber nicht weitergeholfen.
Kann mir jemand einen Tipp geben?

03.11.2010 - 19:09 Uhr

Hi FZelle, meine Nase juckt schon. Genial, das du mich ma richtig auf die Schnittstellen gehievt hast. Ich habe das zwar auch schon im Gallileo 2008 gelesen, konnte aber definitiv nicht soviel damit anfangen. Nun aber habe ich mal zwei abende darüber gelesen. Der Sinn wird mir klar, so eine Funktionalität habe ich schon öfters vermisst. damit können also die verschiedenen Klassen anpassbar und mit Gemeinsamkeiten beritgestellt werden.
Nun, mein Projekt ist erst mal ein bischen groß für diese erste VErsuche, aber ich werds probieren.
da ich bisher drei identische WinFoms hatte, und mit einem untyp. dataSet arbeite, werde ich erst mal das und die SQLAdapter über die Schnittstellen konfigurieren und an die dann gemeinsame Form übergeben.
Da ich 9 Tabellen habe und diese aber in den 3 Forms varieiren, werde ich das auch über die Schnittstellen dementsprechen konfigurieren.
Denkste die Vorgehensweise ist so OK??

01.11.2010 - 21:57 Uhr

Hi FZelle, du hast ja recht mit ital. Nudelgericht 😉

Ich werde mcih mit den Interfaces beschhäftigen, das ist wohl an der Zeit. Ich habe zwei Bücher von C#, werde da wieder mal die Nase reinstecken. Die Literatur dort erklärt zwar nicht so gut, werde aber ncoh im Internet rechrechieren, damit ich das fresse (hoffe ich doch).

01.11.2010 - 13:23 Uhr

Hi FZelle,

ich denke da kommen wir der Sache näher. Über ein #define definiere ich zu Beginn um welche Form dass es sich handelt. Dementsprechend wird im Code auch mit #if
geprüft, welche Projektabteilung der Form entspricht, darüber wird dann auch gesteuert welche Tabellen zu welcher Form (Projektabteilung) geladen werden.

Die Statische Klasse stellt Methoden bereit, die alle Forms benutzen (mit identischem Code). Das habe ich deswegen gemacht, wenn ich daran was änern muß, damit ich das nur einmal machen muss uch nicht in jede Form neu editieren muss, verstehst du mich da richtig?

Nun, ist meine Vorgeensweise so korrekt?
Wenn ja, wie ist das mit meiner Frage aus dem Eröffnungsbeitrag? Da müßte ich wohl au fjeden Fall vererben, wenn ich eine Basisklasse haben möchte, wo ich die andern FOrms immer wieder hineinstecke, oder?

01.11.2010 - 11:56 Uhr

Hallo FZelle,

OOP ist für mich nicht das Fremdwort. Nur hatte ich die Frage mit Forms vererben schon mal, da war die Antwort, einfach kopieren.

Nun sind meine FOrms alle identishc imAufbau, da sind drei Panels drauf und diese werden dynamisch je nach Abteilung aus einer anderen dataTable gefüllt. Die Dinge die in dien Panels dargestellt werden sind CHeckboxen.

Nun, wenn das dann total verkehrt ist gib mir einen Ansatz. Ich habe zuerst sozusagen eine Masterform erstellt, mit der ich mal alles getestet habe. Soll ich dann diese FOrm einfach vererben? Mach mir mal ein Vorschlag.

01.11.2010 - 10:56 Uhr

Hallo, es war und ist meine Aufgabe, eine Verwaltung mehrer Produktionsgruppen zu erstellen, und die Planung der Gruppen in ihren Schichten (3-Schicht) darzustellen. Nun habe ich zuerst eine Produktionsgruppe erstellet, mit de ganzen datenbanken etc. usw und das funktioniert soweit alles. Dann habe ich mich an die zweite Produktionsgruppe gemacht. Ich habe alles in der DB dafür organisiert, habe dann die erste entworfenen FOrm einfach kopiert, und Kleinigkeiten angepasst.

Nun muss ich das System weiterpflegen, es kommt immer wieder etwas an Funktionalität hinzu. Außerdem muß ich noch zwei weitere Produktionsgruppen integrieren. Das heißt, wenn ich etwas ändere, muß ich das auch immer wieder in den anderen Forms ändern, bzw aus der Hauptform kopieren und in die anderen reinkopieren. Ist doch dann immer wieder viel act.

Ich habe nun auch schon eine statische Klasse erstellt, in den ich viele Methoden ausgelagert habe, und somit Änderungen nur zentral an einer Stelle ausführen muss.
Damit ich mir das Leben aber noch einfacher machen könnte, würde ich gerne im Konstruktoraufruf einer Form diese Form in die statische Klasse übergeben, damit ich dort dann auf die ganzen Controls usw. zugreifen und diese manipulieren kann. Das geht ja uach mit der Übergabe.

Nun aber zu folgendem Problem: Wenn ich jetzt 4 Forms habe, die alle aus der Hauptform resultieren, muß ich jedes mal abfragen, welche Form den gerade aktiv ist, um auf die betreffenden Controls usw. zuzugreifen können. Das ist einfach nervig, in jeder MEthode das abzufragen.
Gibt es eine Superklasse oder so etwas, wo ich sagen kann, das die WinForms immer auf die betreffende WinForm beziehen, aus der sie die Kopie sind?
Oder ist mein Ansatz komplett falsch?