Laden...
Avatar #avatar-3199.jpg
Benutzerbeschreibung

Forenbeiträge von Balaban_S Ingesamt 194 Beiträge

22.02.2015 - 19:26 Uhr

das Stichwort, was du suchst heißt Closure, s.a.
>
(unter dem gleichnamigen Kapitel "Closures").

Dass ist es danke

21.02.2015 - 09:21 Uhr

Zuerst mal Danke für die Antwort

Ich kann dir nur empfehlen den Code neuzuschreiben.
Das sieht alles sehr unschön und teilweise mit deinem umgebauten Code auch sehr gruselig aus.

Ist klar, es handelt sich hierbei wie gesagt um die verkürzte version.

Da deine Queue erst nach dem füllen abgearbeitet wird, ist in der anonymen Methode dann auch item eben das letzte Objekt in deiner Liste.
Du solltest ggf. deine Verarbeitung umstellen von einer anonymen Methode auf eine richtige Methode und übergibst dort einfach dein Item Objekt.
Dann hast du auch nicht solche komischen Nebenwirkungen und dein Code ist auch klarer.

ja mit var scheint es zu klappen.

Aber warum machst du es dir eigentlich nicht einfacher und startest einen extra Thread ....

War halt wirklich nur quick and dirty......

Dann bleibt deine UI auch nicht hängen.

Meine UI bleibt nich hängen ich benutze schon Invoke(), sieht man nur hier nicht.

Gruss

21.02.2015 - 08:26 Uhr

Hallo Forum

Ich habe vor kurzem ein Programm erstellt, dessen Funktion es sein sollte alle Verzeichnisse innerhalb eines Verzeichnisses mit dem 7-Zip-CommandLine-Tool zu packen. Für jedes Verzeichnis sollte ein Prozess gestartet werden um Ressourcen zu schonen sollte nichts parallel laufen. So schien es mir Plausibel eine Queue<Action> mit allen verzeichnissen zu erstellen und dann die Queue jeweils mit dem Process.Exited Event von 7-Zip.exe als Trigger abzuarbeiten.

In habe versucht den Code verkürzt darzustellen:


		//QuellVerzeichnis
		private string srcDir;
		//ZielVerzeichnis
		private string destDir;
		//Verzeichnisliste
		private List<String> DirectoryNames = new List<string>();
		//Aktionen
		private Queue<Action> ActionList = null;
		 private void ProcessDirectory()
		 {
            if (!string.IsNullOrWhiteSpace(textBox1.Text)&&!string.IsNullOrWhiteSpace(textBox2.Text))
            {
                srcDir = textBox1.Text;
                destDir = textBox2.Text;
            }
	    else
            {
                 return;
             }
           
            if (Directory.Exists(srcDir)&& Directory.Exists(destDir))
            {                                                           
                DirectoryNames.AddRange(Directory.EnumerateDirectories(srcDir));
		///SIGNIFIKANTER BEREICH BEGINN
                //Argumente
                var args = " a -mx9 -bd \"{1}.7z\" \"{0}\\\" -scswin";
                //Dateiname
				var fname = @"C:\Program Files\7-Zip\7z.exe";
				foreach (var item in DireDirectoryNames)
				{
					ActionList.Enqueue(() => {
                    var tmpstr = item;
                    ProcessStartInfo psinfo = new ProcessStartInfo();
                    psinfo.FileName = fname;
                    psinfo.Arguments = string.Format(args, tmpstr, tmpstr.Replace(srcDir, destDir));
                    Debug.WriteLine(psinfo.Arguments);
                    var p = new Process();
                    p.StartInfo = psinfo;
                    p.Start();
                    p.EnableRaisingEvents = true;
					//SchleifenTrigger
                    p.Exited += (o, j) =>
                    {
						GetNextProc();
                    };
					});
                }
				//Erster Aufruf
				 GetNextProc();
                ///SIGNIFIKANTER BEREICH ENDE
            }
        }
        void GetNextProc()
        {
            if (ActionList.Count > 0)
            {
                ActionList.Dequeue()();
            }
            else
            {
                MessageBox.Show("Finished");
            }
        }

Da ich die ARgument für 7-Zip vorher getestet hatte, war ich mir ziemlich sicher , dass alles reibungslos hätte funktionieren sollen, ich wurde jedoch eines anderen belehrt.

Das Programm lief zwar fehlerfrei durch, ich hatte jedoch am Ende immer nur einen Komprimierten Ordner im Zielverzeichnis und dieses hatte den Namen des letzte Verzeichnisses innerhalb des QUellverzeichnisses. Das hatte ich bisher nicht für möglich gehalten, warum auch?

Nach etwa einer Stunde kam ich durch Probieren auf die Lösung, Ich musste anstatt foreach eine for-schleife nehmen und zwar so:



                //Argumente
                var args = " a -mx9 -bd \"{1}.7z\" \"{0}\\\" -scswin";
                //Dateiname
                var fname = @"C:\Program Files\7-Zip\7z.exe";

for (int i = 0; i <  (int i = 0; i < DirectoryNames.Count; i++).Count; i++)
				var item = DirectoryNames[i];

....

Und dann lief das Programm korekt durch und verrichtete die gewünschte Arbeit.

Wie ihr seht ist das Problem jetzt ja schon gelöst nur nimmt es mich sehr Wunder wie diese Verhalten heisst und wo ich mehr darüber nachlesen kann. Ich war bisher der Meinung dass eine Anonyme Methode das Gleiche ist wie eine normale Methode und dass Variablen innerhalb des scopes neu erstellt werden insbesondere immutable-Typen wie Strings.( ALso warum bleibt die Referenz quasi auf item hängen?

Ich verwende in letzter Zeit des öfteren Queue<Action> ist es nicht Ratsam oder könnt ihr evtl. etwas Anderes für solche Zwecke empfehlen?

Ich hoffe, dass ich mich verständlich ausgedrückt habe.

02.12.2014 - 03:48 Uhr

hi
Ist ja klar object besitzt ja keine solche Methode.
Imho sollte man hier besser dynamic verwenden.

Hierzu denke ich dass man eigentlich mehr über die active-x komponente wissen sollte, wie sieht es denn mit einem Verweis auf die Typelib (Stichwort:tlbimp.exe)aus?

Vielleicht kriegt man aus dieser ein Interface generiert dann ist das ja meistens (aber nicht immer) schon die halbe Miete.
Gruss

01.12.2014 - 03:39 Uhr

Hallo
Ist schon ein Bisschen her aber meines Wissens werden TableAdapter sowie TableAdapterManger - Klassen als

partial

angelegt, daher kann man dann so programmieren:



namespace WeineApp.deinDataSetTableAdapters {
        
    public partial class TableAdapterManager
    {
        public void SetConnection(IDbConnection con)
        {
            this.Connection = con;
        }
    }

}

Gruss

17.10.2013 - 13:18 Uhr

Hoffe mein Feedback kommt für dich nicht zu spät...

Nein überhaupt nicht, habe mich auch mittlerweile dagegen entschieden, obwohl ich einen grossen Rabatt bekommen hätte.

Dank und Gruss
Balaban_S

25.09.2013 - 13:45 Uhr

Hallo

Da ich mir generell mit Einkauf von Fremdkomponeneten schwer tue, würde ich gerne wissen, ob jemand hier im Forum Erfahrungen mit den Syncfuison Tools sammeln konnte, da ich eine objektive Meinung über das Produkt brauchen würde.
Ein wichtiger Punkt wäre für mich zum Beispiel Stabilität im Desktopbetrieb.

Gruss
Balaban_S

14.09.2012 - 12:19 Uhr

Danach habe ich ACE mit JET ausgetauscht, doch dann kommt der Fehler:

Der 'Microsoft.JET.OLEDB.12.0'-Provider ist nicht auf dem lokalen Computer registriert.  

Der Provider heisst :


Microsoft.Jet.OLEDB.4.0

siehe:
Connection strings for Excel
und
Connection strings for Excel 2007
Gruss

Balaban Senol

12.09.2012 - 19:13 Uhr

Nun ja, ich würde sagen, die Dateiendung ist OleDb ziemlich egal. Wenn du mit Sicherheit weisst, dass es eine Excel-Datei ist, spricht nichts dagegen, das mit OleDb anzusprechen. Natürlich stellt sich die Frage, ob jetzt ACE oder JET? Das solltest du schon noch herausfinden.

Zur zweiten Frage: Das hast du korrekt erfasst, dem DataSet ist es auch egal woher die Daten stammen, entscheidend ist der DataAdapter bzw. TableAdapter.

Gruss

Balaban_S

08.08.2012 - 23:46 Uhr

Coole Sache

Ich habe mal in einem Buch gelesen, wie man Assembler code als string in c++/cli on the fly kompiliert und von .net aus ausführt. Daher an sich nichts Neues, aber tolle Leistung 👍 Respekt.
Werd ich verfolgen.

Gruss

08.08.2012 - 21:14 Uhr

Ribbons dürfen aber nicht für Textverarbeitungs(-ähnliche)-Anwendungen mit kommerziellem Hintergrund verwendet werden.

Ok kann sein, habe noch nie ein Ribbon benutzt. Und ich gebe es zu, ich habe auch noch nie dieses Control verwendet.

EDIT: Kann man anscheinend auch im XP-Mode verwenden. Also ohne Ribbon.
Gruss

08.08.2012 - 20:04 Uhr

Kommt darauf an, ob dir z.Bsp. Tx Control Express reicht.

Gruss

08.08.2012 - 19:01 Uhr

Hallo Paladin007
Wenn es MS-Office ist, kannst du evtl. mit der ROT (Running Object Table) etwas anstellen. Hierbei ist es möglich lafaunde Prozesse via COM anzusprechen, wenn sie COM-Interop unterstützen.
such mal bei G nach c# running object table example".

Für andere Programme, z.Bsp. Works usw. könnte es schwieriger werden, dann ist wie schon beschrieben eine Lösung via FileSystemWatcher oder so machbar.

Gruss

08.08.2012 - 15:02 Uhr

Hallo Dux

Eine Lösung wäre z.Bsp. wenn du mit DataColumn.Expression-Eigenschaft arbeitest => dann kannst du direct mit einem Select die Gewünschten Daten erhalten.
Eine andere Lösung könnte sein, dass du bei der Erstellung des DataRow-Arrays
die DataRow.GetChildRows-Methode (DataRelation) verwendest.

Andere Lösungen z.Bsp. mit LinqToDataset nicht ausgeschlossen.

Gruss

08.08.2012 - 02:16 Uhr

Hi KST
Abgesehen davon, dass wahrscheinlich

AcceptChanges()

(Wo auch immer das für dich sinnvoll sein mag, ob jetzt im DataSet,DataTable oder in der DataRow) die Lösung für dein Problem ist, solltest du dir IMHO überlegen, warum du keine typisierten DataSets verwendest, das erledigt der TableAdapter dann nämlich selber.

Gruss
Balaban_S

09.04.2012 - 10:08 Uhr

Ich habe jetzt vorübergehend (auf) normales EF umgestellt und es klappt ohne Probleme. Zum Glück war es nichts grosses. Code First auf dem Desktop?
(momentan) Besser nicht 😉

Gruss

Balaban_S

07.04.2012 - 13:20 Uhr

Zuerst einmal vielen dank für die Antwort
Ok, das mit den EF Versionen werd ich überprüfen, die db hab ich mittlerweile gelöscht, somit kann es nicht (mehr) am connectionstring und der DB liegen.Und wo gibt es denn bei codefirst metadaten?

Das mit den Ressourcen schonen ist so eine Sache, da CE kein Verbindungspooling kennt und sowieso singleuseranwendung ist, erlaube ich mir nur einmal die Verbindung zu öffnen und beim Beenden zu schliessen.

Gruss

07.04.2012 - 08:15 Uhr

SqlCe.40 EntityFrameWork 4.3.1 Code first Windows.Forms

Hallo und frohe Ostern

Ich habe eine Anwendung bei der plötzlich die Fehlermeldung:

Fehlermeldung:
Der Typeninitialisierer für "System.Data.Entity.Internal.AppConfig" hat eine Ausnahme verursacht.

bei der initilaisierung des DBContextes auftaucht.

Bis vor kurzem funktionerte alles Wunderbar. Der Fehler kam aus dem Nichts.
Der Initialisierungscode:


StoreClientEntities db=new StoreClientEntities();
...

nichts weiter.

Zuerst arbeitete ich so:


StoreClientEntities db;
...
protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            db = new StoreClientEntities();
...
        }

Als dann nichts mehr ging und alle Debug-Haltepunkte übersprungen wurden wechselte ich zur oberen Version und erhielt dann eben die Fehlermeldung.

Hier noch die config:


<?xml version="1.0"?>
<configuration>
  <connectionStrings>
    <add name="StoreClientEntities"
     connectionString="Data Source=|DataDirectory|\StoreClientEntities.sdf"
     providerName="System.Data.SqlServerCe.4.0"/>
  </connectionStrings>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.3.1.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  </configSections>
  <system.data>
    <DbProviderFactories>
      <remove invariant="System.Data.SqlServerCe.4.0" />
      <add name="Microsoft SQL Server Compact Data Provider 4.0"
           invariant="System.Data.SqlServerCe.4.0"
           description=".NET Framework Data Provider for Microsoft SQL Server Compact"
           type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
    </DbProviderFactories>
  </system.data>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
</configuration>

Was kann dies verursachen?

Gruss

06.04.2012 - 22:17 Uhr

Hallo Peter

Ich würde nicht an die DataTable direkt Binden sondern an eine DataView zumindeset nach dem sortieren mit DataTableExtensions.AsDataView(T)-Methode (EnumerableRowCollection(T))
Hierbei kannst du mit Linq nach belieben sortieren. Natürlich solltest du dir die Sortierung merken.

Gruss

22.02.2012 - 09:04 Uhr

Hallo

Evtl kann man DataGridViewCellStyle.Format-Eigenschaft dafür benutzen.

Gruss

23.11.2011 - 21:41 Uhr

Hallo zusammen

@BerndFfm

.. SQL Server Compact (so heißt er inzwischen)..

🤔 Das "CE" bedeutet doch "Compact Edition" oder?
Ist ja eigentlich nur ne Abkürzung ich schreibe manchmal einfach nur SQLCE.

Gruss

20.06.2011 - 12:15 Uhr

Hallo Dimuwe

entweder verzichtest du in diesem Fall(nicht generell/nur als Workaround) auf Parameter und bildest das SQL mit einem StringBuilder oder so ODER du erstellst eine Temporäre Tabelle und speicherst deine Parameterliste dort um mit dem IN-statement darauf zugreifen zu können, denn Aufzählungen gehören nicht zu den vom SqlCeParametern akzeptierten SqlDbTypes.

Gruss

Balaban_S

18.06.2011 - 13:22 Uhr

Hallo

Wenn die ganze Zeile formatiert werden soll empfehle ich hierfür das **RowPrePaint **und zwar in dieser Form:


DataGridViewCellStyle CustomStyle = new DataGridViewCellStyle() { BackColor = Color.Yellow, ForeColor = Color.LightGray };

private void TheDataGridView_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
        {
            if (e.RowIndex >= 0)
            {
                DataGridViewRow row = TheDataGridView.Rows[e.RowIndex];
                YourEntity ent = (YourEntity)row.DataBoundItem;
                if (CheckVal(ent)/*bitte implementieren*/ )
                {
                    row.DefaultCellStyle = CustomStyle;

                }
            }
        }

EDIT://
Zu beachten ist, dass im Falle einer DataTable natürlich das **YourEntity **in eine **DataRowView ** gecasted werden sollte.

Gruss

Balaban_S

02.06.2011 - 00:53 Uhr

Hallo _pi

Ok ich gebe zu die quelle, die Ich verlinkt habe ist eine Ältere und bezieht sich noch auf VS2005. Mit VS2008 ist der TableAdapterManager hinzugekommen (hatte ich vollkommen vergessen), der wird per default erstellt. Somit kannst du diese Klasse erweitern ansprechen;


namespace DeinProjekt._pi_devDataSetTableAdapters
{
    public partial class TableAdapterManager
    {

        public void SetConnection(ByteFX.Data.MySqlClient con)
        {
            
            _connection = con;
            //Wenn TableAdapter vorhanden
            if (_mitarbeiterTableAdapter!= null)
            {
                _mitarbeiterTableAdapter.Connection = con;  
            }
            .
            .
            .
            
        }
    }
}


und im Konstruktor der Form


public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

var bldr = new MySqlConnectionStringBuilder ();
            bldr.DataSource = "";
            bldr.UserID = "";
            bldr.Password = "";
            bldr.Database = "";

            tableAdapterManager.SetConnection(new MySqlConnection(bldr.ConnectionString));
        }

Was du für ConnectionErrors zu erwarten hast musst du selbst wissen. Auf jeden Fall werfen die Adapter eine aussagekräftige **Exception(bzw. MySqlException) ** falls etwas nicht in Ordnung sein sollte und die kann man wie trashkid2000 schon geschrieben hat via try catch-Blöcke abfangen.

Gruss
Balaban_S

29.05.2011 - 22:42 Uhr

Ok
angepasst:


using ByteFX.Data.MySqlClient
using DeinProjekt._pi_devDataSetTableAdapters;

namespace DeinProjekt
{
   public class mitarbeiterTableAdapterConnectionManager
   {

      public static MySqlConnection GetConnection(
         mitarbeiterTableAdapteradapter)
      {
         return adapter.Connection;
      }

      public static void SetConnection(mitarbeiterTableAdapter adapter,

         MySqlConnection connection)
      {
         adapter.Connection = connection;
      }
   }
}

Gruss

Balaban_s

29.05.2011 - 21:48 Uhr

Hallo _pi

...
Den Part den ich aber nicht verstehe, ist wie ich vorgehen muß, um den generierten ConnectionString ohne Passwort im Code zu verwenden
...

Dies ist ein anderes Thema und du solltest hierfür einen neuen Thread erstellen.

Zu deiner Frage.
Erstelle eine Klasse in der selben Assembly gemäss dem folgenden Beispiel:



using System.Data.SqlClient;
using NorthwindDataAccess.CustomersDataSetTableAdapters;

namespace NorthwindDataAccess
{
   public class CustomersTableAdapterConnectionManager
   {

      public static SqlConnection GetConnection(
         CustomersTableAdapter adapter)
      {
         return adapter.Connection;
      }

      public static void SetConnection(CustomersTableAdapter adapter,

         SqlConnection connection)
      {
         adapter.Connection = connection;
      }
   }
}

Quelle:
Data Binding with Windows Forms 2.0: Programming Smart Client Data Applications with .NET
Von Brian Noyes
...............................................
Publisher: Addison Wesley Professional

Kapitel 2: Connection Management

Gruss
Balaban_S

18.05.2011 - 14:10 Uhr

Hallo

Wenn du Verweise gemäss Separate primäre Interopassemblys zum Erstellen und Ausführen von Projekten auf die Dateien in den enstprechenden Verzeichnissen:

%ProgramFiles%\Microsoft Visual Studio 10.0\Visual Studio Tools for Office\PIA\Office12  

(oder %Programme(x86)%\Microsoft Visual Studio 10.0\Visual Studio Tools for Office\PIA\Office12 auf 64-Bit-Betriebssystemen)  

%Programme%\Microsoft Visual Studio 10.0\Visual Studio Tools for Office\PIA\Office14  

(oder %Programme(x86)%\Microsoft Visual Studio 10.0\Visual Studio Tools for Office\PIA\Office14 auf 64-Bit-Betriebssystemen)

hinzufügst und nicht über via Dialogfeld **Verweis hinzufügen **auf der Registerkarte COM sollte es funktionieren.

Gruss

Balaban_S

EDIT: Ich habe leider kein Office auf dem Laptop installiert und kann nicht mehr dazu sagen.

18.05.2011 - 13:19 Uhr

Hallo InSiDeR

Dies ist schon ein älteres bekanntes Problem und es gibt einige verschieden Lösungen dafür.
Hier nur ein paar Stichwörter und Links, welche IMO selbsterklärend sind:
*Primäre Interopassemblys in Office *Gewusst wie: Zugreifen auf Office-Interop-Objekte mithilfe von Visual C# 2010-Funktionen (C#-Programmierhandbuch)

Gruss

Balaban_S

EDIT: Link korrigiert

17.05.2011 - 13:04 Uhr

Hallo qduda

Meinst du evtl so etwas wie DataRowCollection.Add-Methode (Object[])?

Gruss

Balaban_S

01.05.2011 - 13:20 Uhr

Hallo Johnny B

Also so wie ich das sehe ist der Gruppenname, vorausgestzt die ID Spalte ist als Primärschlüssel festgestzt schon so verfügbar:


var ArtikelgruppeName =
(string)bestellungenDataSet.Produktgruppe.Rows.Find(ArtikelgruppeID)[1];

Die typisierte Variante bietet soweit ich weiss gleich automatisch .FindByID()
an wenn ID als Primärschlüssel definiert ist.

Gruss

Balaban_S

01.05.2011 - 05:55 Uhr

Hi Johnny B

Ich weiss nicht ob du ein typisiertes oder untypisiertes DatsSet verwendest
Ich schreib mal für beide Varianten.


/*Typisiert*/
BestellungenDataSet.ProduktgruppeRow row = 
(BestellungenDataSet.ProduktgruppeRow)((DataRowView)comboBox1.SelectedItem/*EDIT:das hier war nicht korrekt*/).Row;


/*Untypisiert*/
DataRow row =
(DataRow)((DataRowView)comboBox1.SelectedItem/*EDIT:das hier war nicht korrekt*/).Row;

oder


/*Typisiert*/
BestellungenDataSet.ProduktgruppeRow row =
(BestellungenDataSet.Produktgruppe)((DataRowView)produktGruppeBindingSource.Current).Row;


/*Untypisiert*/
DataRow row =
(DataRow)((DataRowView)produktGruppeBindingSource.Current).Row;

und in jedem Fal dann


/*Typisiert*/
var ArtikelgruppeName = row.GruppenName;


/*Untypisiert*/
var ArtikelgruppeName = row[1].ToString();

Gruss

Balaban_S

24.04.2011 - 07:57 Uhr

Hallo

Nachdem ich das überdacht habe ergibt sich für mich folgende optimierte Herangehensweise.


private void TheDataGridView_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
        {
            if (e.RowIndex >= 0)
            {
				DataGridViewRow row = TheDataGridView.Rows[e.RowIndex];
				YourEntity ent = (YourEntity)row.DataBoundItem;
				if (CheckDates(ent)/*bitte implementieren*/ )
                {
                    row.Visible=false;
					e.Handled=true;/*sehr wahrscheinlich besser*/
					return;
                    
                }
                if (CheckVal(ent)/*bitte implementieren*/ )
                {
                    row.DefaultCellStyle = CustomStyle;
                    
                }
            }
        }

Eine Fortführung des Ganzen würde wahrscheinlich zu einer(oder mehreren) Erweiterungsmethode(n) für das DGV-Control führen welche delegaten und lambdas annimmt.

Interessant. 🤔

@Humsch: Dein Code färbt nur eine einzelne DataGridViewCell ein und nicht wie gewünscht die ganze Reihe/Zeile.

Gruss

Balaban_S

23.04.2011 - 18:42 Uhr

Hallo skelle


   DataGridViewCellStyle CustomStyle = new DataGridViewCellStyle() { BackColor = Color.Yellow, ForeColor = Color.LightGray };
   
   private void TheDataGridView_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
        {
            if (e.RowIndex >= 0)
            {
                if (CheckVal(deineCollection[e.RowIndex].deinWert)/*bitte implementieren*/ )
                {
                    for (int ix = 0; ix < TheDataGridView.ColumnCount; ix++)
                    {
                        TheDataGridView[ix, e.RowIndex].Style = CustomStyle;
                    }
                }
            }
        }

für

alle Einträge, welche ausserhalb dieser Spanne liegen sollen ausgeblendet werden.

empfiehlt sich evtl. CollectionView Class ansonsten wenn möglich auf Bindingsource/DataTable ausweichen.

Gruss

Balaban_S

14.04.2011 - 18:34 Uhr

Hallo sharpType

Das macht man dann so wie in diesem Beitrag.

Kann man als bewährte Methode ansehen.

Gruss

Balaban_S

13.04.2011 - 10:04 Uhr

Hallo ludden

oder gleich Microsoft Jet OLE DB 4.0
siehe auch:

Connection strings for HTML Table

Gruss

Balaban_S

12.04.2011 - 23:00 Uhr

Hallo sharpType

Diese 2 Artkel sollten mehr Klarheit bringen.

Umgang mit 'DataAdapter'-Ereignissen (ADO.NET)

Using TableAdapters to Insert Related Data into an MS Access Database
(Beispiel in VB und mit TableAdaptern)
Grundsätzlich ist die Herangehensweise mit typisierten DataSets und TableAdaptern vorzuziehen, damit man nicht händisch die DataRelations erstellen muss.

MultipleActiveResultSets=True habe ich mit in der Verbindungszeichenfolge übergeben.

MultipleActiveResultSets auch bekannt als MARS gibt es erst seit MSSQL2005, eine Google-Suche kann dir da mehr Infos dazu liefern..

Gruss

Balaban_S

05.04.2011 - 14:36 Uhr

Hallo snupi

oder erledigt das mir das DataSet ?

Ganz genau. Du musst natürlich die Aktualisierungsweitergabe bei der Bezeiehung auf "Cascade" setzen und solltest einen TableAdapterManager benutzen und dann mit .UpdateAll() gleich das ganze DataSet aktualisieren.
Hierfür empfiehlt sich der Abschnitt Hierarchische Aktualisierung in der msdn-lib.

Gruss

Balaban_S

04.04.2011 - 22:14 Uhr

Hallo

ich denke, dass ich den Fehler gefunden habe und zwar hier:


 ds = new DataSet(Table);

sollte:


 ds = new DataSet();
ds.Tables.Add(Table);

sein.

Nachzulesen in der Dokumentation.
Hier die Links:*DataSet-Konstruktor *DataTableCollection.Add-Methode (String)

Gruss

Balaban_S

04.04.2011 - 20:25 Uhr

Hallo Ho'nehe

Ich möchte noch etwas hinzufügen.

Commandbuilder ist fehl am Platz, der wird dir so oder so keinen Commands bilden , weil du 'JOIN's im query hast.

Ich denke du solltest dich in ADO.net einlesen, bevor du solch "komplexe" commands zusammenbastelst.

Gruss

Balaban_S

04.04.2011 - 17:47 Uhr

Hallo snupi

Schau in diesem Beitrag ist das beschrieben.

Gruss

Balaban_S

31.03.2011 - 19:49 Uhr

Hi IMGregor

Hi habe das zwar nie verwendet und kann nichts über die Qualität sagen aber Quartz.NET - Enterprise Job Scheduler for .NET Platform kommt mir da als erstes in den Sinn. Vielleicht hilft es dir ja weiter.

Gruss

Balaban_S

31.03.2011 - 08:34 Uhr

Hi med

Du könntest dir so etwas wie eine (oder mehrere) reine Datenklasse(n) bauen, welche die Daten enthält und dann dementsprechend reine "Arbeiter"-Klassen die mit den Daten arbeiten.

In Verbindung mit GUI bzw. Datenbindung kommen da viele Herangehensweisen in Frage, welche z.Bsp.(falls überhaupt vorhanden) von der View-/Model-Konstellation abhängig sind.
Hierfür sollte man mehr über die Problemstellung wissen.

Repository-Pattern könnte ein Stichwort hierfür sein.

Grus Balaban_S

29.03.2011 - 17:48 Uhr

Hallo AxelA

Nun das Prinzip des ADO.net-DataSets ist ja eigentlich, das die Daten "disconnected" von der Datenbank sind, wenn du die Daten aus fer Datenbank lädst sind sie im Arbeitspeicher hältst(siehe unbedingt DataSets, DataTables und DataViews (ADO.NET)).

Deswegen empfiehlt es sich unter Anderem:*Die Daten nur zu dann Laden, wenn sie benötigt werden. *Nur so viel Daten zu laden wie es zur Anzeige sinnvol ist z.Bsp durch Paging oder gleich Suchparamter an den Adapter zu übergeben um das Resultat einzuschränken.

In allen Fällen gilt jedoch, dass man nicht vorausssagen kann, wann der Garbagecollector aktiv wird und die Ressourcen freigeben wird.
Wenn du aber sicher weisst , dass die Grösse des Arbeitspeichers andere Prozesse beeinträchtigen wird und du alle oben genannten Möglichten schon ausgeschöpft haben solltest, kannst du schauen ob du mit der Process.MaxWorkingSet-Eigenschaft die maximal erlaubte Speichergrösse für den Prozess festlegen. Es sollte hierbei erwähnt werden, dass daraus aber wiederum andere Probleme resultieren können.

Gruss

Balaban_S

23.03.2011 - 20:40 Uhr

Nun ja

Erstens handelt es sich hierbei um eine komplett andere Frage.
Zweitens ist es auf mycsharp.de nicht üblich Komplettlösungen anzubieten siehe Wie poste ich richtig?.

Was deine Frage anbelangt (um sie dann doch nicht unbeantwortet zu lassen) würde eine mögliche Lösung so aussehen:



/// Durch diesen Button wird Aktion gestartet
private void button2_Click(object sender, EventArgs e)
            {
                /// Starte Timer
                timer1.Start();
            }
 int AnzahlZeilen = dataGridView1.Rows.Count;
                int i=0;
/// Timer Event
            private void timer1_tick(object sender, EventArgs e)
            {
               /// Anzahl der Zeilen in der datagIrdView Liste
              

                        if(i<AnzahlZeilen)
                        {
                        // Auswahl der Zeile == true
                        dataGridView1.Rows[i].Selected = true;

                        MessageBox.Show("Bin gerade in Zeile: " + i);

                        // Auswahl der Zeile == false
                        dataGridView1.Rows[i].Selected = false;
                        i++;
                        }
                        else
                        {               
                        /// stoppe Timer
                        timer1.Stop();
                        //Zähler wieder auf 0
                        i=0;
                        }
            }

Gruss

Balaban_S

22.03.2011 - 18:31 Uhr

Ein HAMMER Bussi an dich!!!!!!!!

gern geschehen

Hast du oder jemand hiermit bereits Erfahrung gesammelt?

klar

probier mal:


// ds=das Das DataSet
DataTable dt = ds.Tables["List"];
DataRow dr = dt.NewRow();
dr["Name"]="Christian";
dr["Nachname"]="Merkel";
dr["Geschlecht"]="maennlich";
dr["Alter"]=2;
dr["Mutter"]="Melanie";
dr["Vater"]="Jürgen";
dr["Ort"]="Koeln";
dt.Rows.Add(dr);

Hierfür solltest du natürlich das DataSet als Property der entsprechenden Form definiert haben und für weiteres verweise ich unbedingt auf die Dokumentation von ADO.net.
Gruss

Balaban_S

22.03.2011 - 16:18 Uhr

Wo im Designer?

Klar

Helfen die Bilder weiter?

22.03.2011 - 14:17 Uhr

Hallo K.Karin

Ich denke du solltest sicherstellen, dass den Spalten auch die entsprechenden Prpoerties zugewiesen sind.

Im Designer >Spalten bearbeiten> dann entsprechender Spalte eben den Datapropertyname den Propertynamen zuweisen z.Bsp. "Alter".

Gruss

Balaban_S

20.03.2011 - 20:06 Uhr

Hallo Thomas.A

..
in dem ich über eine bool Variable die Entscheidung checked/unchecked entscheide und setze
..

Das kommt übrigens immer auf die zugrundeliegende Variable im Model an. CheckBox hat nicht wie allgemein angenommen 2 sondern 3 Zustände siehe:
CheckBox.Checked-Eigenschaft, CheckBox.CheckState-Eigenschaft, CheckBox.ThreeState-Eigenschaft

Im Übrigen würde ich sowieso Datenbindung empfehlen.

Gruss

Balaban_S

20.03.2011 - 17:00 Uhr

Hallo zusammen

..
Mußt Du nicht DataAdapter.Update() aufrufen
..

Ja und imo komplett ohne .AcceptChanges()

Gruss

Balaban_S

04.03.2011 - 12:19 Uhr

Hallo DaemNice

Hier bietet sich die
DataColumn.Expression-Eigenschaft (Abschnitt: ** Verweise auf Parent/Child-Beziehungen**) an

Oder aber auch die Vorgehnsweise von Juetho in DataGridView: Master/Detail über ComboBox.

Musst halt schauen, ob dir diese Funktionalität reicht. Ich persönlich finde beide Varianten ganz gut.

Gruss

Balaban_S