Laden...
Avatar #avatar-3271.jpg
rollerfreak2 myCSharp.de - Member
Software Architekt Dabei seit 14.07.2008 916 Beiträge
Benutzerbeschreibung
Man lernt nie aus...

Forenbeiträge von rollerfreak2 Ingesamt 916 Beiträge

06.02.2009 - 20:33 Uhr

Geht leider net. Kommt "Insufficient parameters supplied to the command" error bei absetzen der query.

06.02.2009 - 20:16 Uhr

verwendetes Datenbanksystem: <SqLite>
Ich habe eine table in welcher sich eine column mit dem Datentype Datetime befindet.

"CREATE TABLE test(datum Datetime, number integer, primary key (datum, number));"

Jetzt hab ich ein Insert mit zum Beispiel Datetime = "01.01.2009 00:00:00".

Jetzt will ich ein select auf den table machen mit der Bedingung das die column datum zwischen 2 datums sein soll.

Also hab ich folgendes versucht.


SQLiteParameter p1 = new SQLiteParameter("start", DbType.DateTime);
SQLiteParameter p2 = new SQLiteParameter("end", DbType.DateTime);
p1.Value = begindate;
p2.Value = enddate;

command.CommandText = "SELECT * FROM test WHERE (datum BETWEEN '@start' AND '@end');";

Das Problem ist, selbst wenn ich start und end datum so wähle das dass datum in der tabelle genau dazwischen liegt, leifert die query kein ergebnis.

Was mache ich falsch?????

29.01.2009 - 15:13 Uhr

Dann sind doch aber trotzdem alle Tabs noch gleich lang, zwar so lang wie der längste text, aber alle gleich lang, oder seh ich das flasch?

29.01.2009 - 14:43 Uhr

Gibt es dieses ORA auch für VS 2005???

28.01.2009 - 16:46 Uhr

Ich hab mal was von einem tool gehört mit welchem man automatisch alle Methoden einer Klasse in Regions einsortieren kann. Bräuchte das für das Visual Studio 2005. Sprich alle privaten in #region private, protected, overide etc...

Weiß einer welches man dafür nehmen kann, denn ich habs vergessen wie es hieß...

28.01.2009 - 09:45 Uhr

Diese Kommentare werden gefolgt von tags z.b. <summary>. Oder auch die <param> welche die Parameter einer Methode beschreiben. Es gibt tools wie z.b. docomatic oder sandcastle welche aus diesem Tags ein Helpfile für Entwickler generieren. Ein sogenanntes chm file. Zum Sandcastle gibt es ein gereration tool und eine GIU CHM-Builder. Nicht erschrecken, die gerneration befarf einiger Zeit und wird unterwegs in etlige formate umconvertiert ehe es ein chm file raus kommt. Ich hoffe ich konnte helfen.

wiki

27.01.2009 - 16:49 Uhr

Jo das wollte ich ja umgehen, sprich nach dem ändern der Daten abfragen. Aber so geht es auch. merci

26.01.2009 - 16:45 Uhr

Also ich habs jetzt mal ausprobiert die Settings einfach weg zu schmeißen und das Studio zu starten. hab natürlich vorher alle Aktiven Instanzen beendet. Nix passiert, das Studio hat nur gesagt das die Datei fehlt, und er lädt die IDE mit den gewöhnlichen Settings. Aber die Fensterauflösung bleibt gleich. Das ist doch total affig, ich will doch nur das die IDE beim start maximiert ist.

FAZIT:
ICh denke es steht doch in der Registry....

26.01.2009 - 16:29 Uhr

Ich habe eine CheckedListBox in der sich items befinden. Dazu ein Button der nur aktiv sein soll wenn 1 oder mehr checkboxen true sind. Also habe ich folgenden Code geschrieben.


void cbl_cpus_ItemCheck(object sender, ItemCheckEventArgs e)
{
    this.btn_receive.Enabled = (cbl_cpus.CheckedItems.Count != 0);
}

Problem an der Sache ist, wenn ich noch keine CB angeklickt habe, und ich das erste mal in dieser methode lande, dann ist die CheckedItems noch nicht auf den neusten stand. Sodass erst beim checken der 2ten CB der Button aktiv wird, bzw. sogar wenn man selbigen wieder auschecked weil die CheckedItems "hinter hengt".
Jetzt wird ich gern wissen ob man sich an ein Datenbasierendes Event hängen kann, das nur kommt wenn sich daten ändern, und auch nur wenn sich sich geändert haben und nicht wenn sie geändert werden.

Hab leider kein Event gefunden, weis einer Rat?

23.01.2009 - 09:26 Uhr

NEIN, VS2005 auf Xp System...

22.01.2009 - 14:20 Uhr

Da sind ja ein haufen tags drin. Kann mir eventuell einer sagen wo genau das dort drin steht?

22.01.2009 - 13:55 Uhr

Macht es aber nicht. Wenn ich maximiere wird es trotzdem wieder nicht maximiert gestartet. Ich will ja grad wissen wo das in der registry steh, damit ich es manuell ändern kann.

21.01.2009 - 16:24 Uhr

Wo in der Registry ist hinterlegt wie das Studio startet. Bei mir startet das nicht maximiert und ich weis nicht wie ich es hin bekomme, das es beim start gleich maximiert ist.

16.12.2008 - 14:40 Uhr

Echt stark das Teil, hätte man eher wissen sollen das hätte viel zeit gespart...

16.12.2008 - 12:36 Uhr

Das wirst du wohl manuell sortieren müssen, ich kenne da keine Möglichkeit via Studio!

15.12.2008 - 14:23 Uhr

Ich hab das eventuell ein bisschen schlecht beschrieben. Also das Tool besitzt sehr viele externe Libraries. Es werden dann einige Objekte dieser Externen Referencen instantiiert. Nun möchte ich wissen wieviel Referencen das Objekt hat, sprich genau das weis ja der garbage Collector auch. Die internen .net Objekte interessieren mich dabei nicht. Der Speicherbedarf wäre ebenfalls schön zu wissen, dafür werde ich mal PerfCounter ausprobieren.

15.12.2008 - 09:43 Uhr

Ich hab mal eine Frage bezüglich Speicherbedarf und Referencen. Und zwar möchte ich bei einer .Net Anwenundung (c#) zu laufzeit alle Referencen haben, bzw. wissen wieviel Referencen da sind, wieviel Speicher diese Verbrauchen etc.
Die Anwendung liegt im Debug Compile vor. Hat da einer von euch eine Ahnung ob es da fertige tools gibt, welche das dann auflisten, bzw ob es librarys gibt die man einbinden muss, und dann intern die Referencen und Speicherbedarf auflisten kann.

THX

11.12.2008 - 15:02 Uhr

Hab das Thema grad mal gegoogelt, zu laufzeit eine Dll umladen ist echt nicht leicht. Aber man kann ja einen installer schreiben, der dann automatisch die richtige dll dazu legt, und dann wird auch immer die richtige dll geladen. Das ist zumindest eine einfache Lösung.

11.12.2008 - 13:37 Uhr

Jo das mit ILMerge klingt logisch. Also leg ich einfach beide dll's dazu, und muss dann auf dem zielsystem die Bittiefe prüfen und dann die richtige dll laden.
Mal sehen wie ich das mache.

11.12.2008 - 13:31 Uhr

Habs getestet. Funktioniert bestens, genau das habe ich gesucht.

THX

11.12.2008 - 13:24 Uhr

Das muss ich mal ausprobieren. Ob dann auch wenn die summe der Column.widths größer ist als die DGV.widht ob er auch die Srollbar anmacht.
Rein theoretisch sollte das DGV das tun. Ich poste das dann hier.

10.12.2008 - 21:48 Uhr

Also ich habs jetzt mal auf meinem Intel DualCore 2,1 GHZ, 2GB RAM, VISTA 32Bit 1,6 Sekunden, und dabei ist eine TV Karte gelaufen.

10.12.2008 - 21:14 Uhr

mhh jetzt hab ichs. Die aus dem Hauptverzeichnis funktioniert. Jetzt stellt sich mir die Frage wenn ich das dann alle via ilmerge in ein assembly knalle, dann an jemand anders weiter gebe, der eventuell ein 64 bit system hat, geht das dann bei dem noch?

Danke erstmal für deine Hilfe. Wegen den 1,7 Sekunden, das war auf einen single Core, ich teste das gleich mal bei mir und poste mal die Zeit 😃

10.12.2008 - 21:07 Uhr

Ich habe aber ein 32 Bit System, mit Dual Core Intel. Und welche soll ich jetzt einbinden, du sagtest du aus dem managed Verzeichnis geht nicht. Kannst du mal den genauen Namen sagen?

10.12.2008 - 20:21 Uhr

Also ich hab die System.Data.SQLite.dll eingebunden, die in den managedbinaries mit drin war.

Dann den folgenden code, fehlt nur die Form an sich, da designer.


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SQLite;
using System.Data.Common;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;

namespace db_conn
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            using (SQLiteConnection sqlite_conn = new SQLiteConnection("Data Source=database.db;Version=3;New=True;Compress=True;UTF8Encoding=True;"))
            {
                using (SQLiteCommand sqlite_cmd = sqlite_conn.CreateCommand())
                {
                    //open connection
                    sqlite_conn.Open();

                    sqlite_cmd.CommandText = "CREATE TABLE test (id integer primary key, text varchar(100));";
                    sqlite_cmd.ExecuteNonQuery();

                    Stopwatch watch = new Stopwatch();

                    sqlite_cmd.Transaction = sqlite_conn.BeginTransaction();
                    watch.Start();

                    SQLiteParameter parameter_list = sqlite_cmd.CreateParameter(); ;

                    sqlite_cmd.CommandText = "INSERT INTO test (id, text) VALUES (@id, @text);";
                    sqlite_cmd.Parameters.Add("@id", DbType.Int32);
                    sqlite_cmd.Parameters.Add("@text", DbType.String);

                    for (int i = 0; i < 100000; i++)
                    {
                        if (i > 5000 && i < 5050)
                            sqlite_cmd.Parameters[1].Value = "Übung";
                        else
                            sqlite_cmd.Parameters[1].Value = "test";

                        sqlite_cmd.Parameters[0].Value = i;
                        sqlite_cmd.ExecuteNonQuery();
                    }
                    sqlite_cmd.Transaction.Commit();

                    watch.Stop();
                    this.label1.Text = "time:" + watch.ElapsedMilliseconds.ToString() + " ms";

                    sqlite_cmd.CommandText = "SELECT * FROM test where text = 'Übung'";
                    SQLiteDataReader sqlite_datareader = sqlite_cmd.ExecuteReader();

                    StringBuilder tmp = new StringBuilder();
                    while (sqlite_datareader.Read())
                    {
                        tmp.Append(sqlite_datareader[0].ToString() + "," + sqlite_datareader[1].ToString() + Environment.NewLine);
                    }

                    this.textBox1.Text = tmp.ToString();
                    // close connection
                    sqlite_conn.Close();
                }
            }
        }
    }
}


Und bei


 sqlite_conn.Open();

kommt folgende Exeption

An unhandled exception of type 'System.BadImageFormatException' occurred in System.Data.SQLite.dll

Additional information: Es wurde versucht, eine Datei mit einem falschen Format zu laden. (Ausnahme von HRESULT: 0x8007000B)

Ich check das net wieso das bei mir net mit einer dll geht! Hat jemand einen rat für mich? Welche dll bindet ihr denn ein das es bei euch funktioniert?

10.12.2008 - 18:49 Uhr

Also entweder bin ich zu blöd oder ich kann nicht lesen. Ich glaub euch das ja gern das man da nur die System.Data.SQLite.dll einbinden muss, und die beinhaltet dann auch die DB Engine. Nur wenn ich mir das downloade dann steht in der readme dazu

This managed version of the ADO.NET provider for SQLite requires the native
sqlite3.dll or Linux shared library from
>

Requires version 3.6.3 or higher.

Das heißt ich brauche die doch noch, oder lade ich einfach die falsche dll?

Weil wenn ich nur die dll einbinde, und dann oben stehenden code laufen lasse, dann kommt bei der connection.open eine exception das die sqlite3.dll nicht gefunden wurde...

10.12.2008 - 16:06 Uhr

Falsch!!!! Er hat die nativen Dll's ist im übrigen nur eine "sqlite3.dll" nicht enthalten. Aber guck einfach selber, da ist nur die Provider Dll drin.

http://sourceforge.net/projects/sqlite-dotnet2/

Hier ist die sqlite3.dll nicht drin, die muss man sich, wie es auch in der dazugehörigen readme steht sepperat runter laden auf http://www.sqlite.org! Und das die nicht mit dem ilmerge einzubinden geht war mir ziemlich klar da kein .net assembly. Das heißt die muss immer sepperat liegen, und es gibt auch keine andere Möglichkeit die in die exe rein zu bekommen.

War auch nur eine Frage am Rande, ist nicht weiter wichtig...!

Trotzdem Danke.

10.12.2008 - 15:42 Uhr

Der Provider ist eine dll das stimmt. Aber die sqlite3.dll muss ja auch mit rein, das ist ja das Datenbankmanagment an sich.

Dazu eine Frage. Wenn ich verusche diese dll ins studio einzubinden via reference, dann geht das nicht. Weil der mir sagt das "is not a valid assembly or COM commponent". Kann man das irgendwie einbinden.

Sprich wenn ich die dll mit via ilmerge mit in die application.exe rein haue, gibt es da probleme. Oder geht das gar nicht weil es keine .net assembly bzw com commponente ist?

Ansonsten funzt die neue Provider dll sehr gut.

10.12.2008 - 13:59 Uhr

Ganz so gehts net, hast beim zuweisen .value vergesen und die AddWithValue hab ich zu Add(name, DbType) gemacht. Gleichzeitg hab ich noch mal wegen den Umlaute Problem geprüft was mal hie rim Forum erwähnt wurde, und das funzt auch. Mann muss einfach oben im ConnectionString UTF8 oder UTF16 auf true stellen.

Hier mal wie's im release Mode 100000 Elemente in 1,7 Sekunden in die DB schiebt. Das find ich echt schnell 😃 Dank deiner Hilfe


        private void button1_Click(object sender, EventArgs e)
        {
            using (SQLiteConnection sqlite_conn = new SQLiteConnection("Data Source=database.db;Version=3;New=True;Compress=True;UTF8Encoding=True;"))
            {
                using (SQLiteCommand sqlite_cmd = sqlite_conn.CreateCommand())
                {
                    //open connection
                    sqlite_conn.Open();

                    sqlite_cmd.CommandText = "CREATE TABLE test (id integer primary key, text varchar(100));";
                    sqlite_cmd.ExecuteNonQuery();

                    Stopwatch watch = new Stopwatch();

                    sqlite_cmd.Transaction = sqlite_conn.BeginTransaction();
                    watch.Start();

                    SQLiteParameter parameter_list = sqlite_cmd.CreateParameter(); ;

                    sqlite_cmd.CommandText = "INSERT INTO test (id, text) VALUES (@id, @text);";
                    sqlite_cmd.Parameters.Add("@id", DbType.Int32);
                    sqlite_cmd.Parameters.Add("@text", DbType.String);

                    for (int i = 0; i < 100000; i++)
                    {
                        if (i > 5000 && i < 5050)
                            sqlite_cmd.Parameters[1].Value = "Übung";
                        else
                            sqlite_cmd.Parameters[1].Value = "test";

                        sqlite_cmd.Parameters[0].Value = i;
                        sqlite_cmd.ExecuteNonQuery();
                    }
                    sqlite_cmd.Transaction.Commit();

                    watch.Stop();
                    this.label1.Text = "time:" + watch.ElapsedMilliseconds.ToString() + " ms";

                    sqlite_cmd.CommandText = "SELECT * FROM test where text = 'Übung'";
                    SQLiteDataReader sqlite_datareader = sqlite_cmd.ExecuteReader();

                    StringBuilder tmp = new StringBuilder();
                    while (sqlite_datareader.Read())
                    {
                        tmp.Append(sqlite_datareader[0].ToString() + "," + sqlite_datareader[1].ToString() + Environment.NewLine);
                    }

                    this.textBox1.Text = tmp.ToString();
                    // close connection
                    sqlite_conn.Close();
                }
            }
        }

Many Thanks

10.12.2008 - 12:43 Uhr

Jo das meine ich auch, im catch wäre schwachsinn, weil man es dann im try block auch closen müsste.

Ich hab das jetzt mal so modifiziert das es echt schnell läuft, und denk ich performance technisch auch ordentlich ist.


         private void button1_Click(object sender, EventArgs e)
        {
            using (SQLiteConnection sqlite_conn = new SQLiteConnection("Data Source=database.db;Version=3;New=True;Compress=True;"))
            {
                using (SQLiteCommand sqlite_cmd = sqlite_conn.CreateCommand())
                {
                    //open connection
                    sqlite_conn.Open();

                    sqlite_cmd.CommandText = "CREATE TABLE test (id integer primary key, text varchar(100));";
                    sqlite_cmd.ExecuteNonQuery();

                    Stopwatch watch = new Stopwatch();

                    sqlite_cmd.Transaction = sqlite_conn.BeginTransaction();
                    watch.Start();

                    SQLiteParameter parameter_list;
                    
                    for (int i = 0; i < 100000; i++)
                    {
                        sqlite_cmd.Parameters.Clear();
                        
                        parameter_list = sqlite_cmd.CreateParameter();
                        parameter_list.ParameterName = "@id";
                        parameter_list.DbType = DbType.Int32;
                        parameter_list.Value = i;
                        sqlite_cmd.Parameters.Add(parameter_list);
                        
                        parameter_list = sqlite_cmd.CreateParameter();
                        parameter_list.ParameterName = "@text";
                        parameter_list.DbType = DbType.String;
                        parameter_list.Value = "test";
                        sqlite_cmd.Parameters.Add(parameter_list);

                        sqlite_cmd.CommandText = "INSERT INTO test (id, text) VALUES (@id, @text);";
                        sqlite_cmd.ExecuteNonQuery();
                    }
                    watch.Stop();
                    this.label1.Text = "time:" + watch.ElapsedMilliseconds.ToString() + " ms";
                    sqlite_cmd.Transaction.Commit();
                    
                    // close connection
                    sqlite_conn.Close();
                }
            }
        }

Oder gibt es jetzt noch was auszusetzen dran 😃

10.12.2008 - 12:17 Uhr

Also das mit der Transaction hab ich jetzt geschnallt. Warum ich allerdings ein using bei der connection brauch nicht. Ich denke das using macht nix weiter als die resource in dem fall die Connection bereitstellen, und am ende wieder freigeben.

Das heißt wenn ich im catch block die connection wieder schließe (sollte eine schon bestehen, kann man ja abchecken) dann ist das doch dass selbe, oder nicht?

Das mit den Parameter ist sicher nur performance technisch wichitg, da hast du schon recht! Weil ja jedes mal ein String zusammen gecattet wird, und das sehr umständlich ist, oder hat das auch noch einen anderen Grund warum ich das nehmen soll?

THX for your help 😃

10.12.2008 - 11:00 Uhr

Das mit dem Transaction ist mir neu. Aber ich werde es mal ausprobieren. Was du allerdings mit den Parametern meinst weis ich nicht. Kannst du das bisschen genauer erklären.

10.12.2008 - 10:30 Uhr

Ich vertseh das nicht richtig. Du schriebst

wird die Row am Ende via datagrid.AutoResizeRow(row) zur Laufzeit verändert und dann aber schreibst du
das sich in der Folgespalte ein Button befindet ????

Wie soll das denn gehen? Also wie kann dort noch eine Folgespalte sein? Ich denke du machst nur die letzte Spalte autosizerow(row).

10.12.2008 - 10:22 Uhr

verwendetes Datenbanksystem: <SQLite da free und embedded>

Ich habe mal eine Frage bezüglich Performance der SQLite Datenbank und Anbindung an c#. Ich brauche die DB nur um Daten abzulegen und dann schnelelr drauf zugreifen zu können. Also hab ich mich für SQLite entscheiden da free und embedded. Nun hab ich hier die 3 dll's eingefügt. 2 konnte ich nicht referencieren nur die sqlite.dll, die anderen beiden hab ich mit dazu kopiert. Die sind angeblich keine COM komponenten, aber die weren von der sqlite.dll zu laufzeit mit eingebunden, zumindest vermute ich das.

Nun hab ich mal schnell folgenden Code geschrieben um mir die Performance anzusehen.


        private SQLiteConnection sqlite_conn;
        private SQLiteCommand sqlite_cmd;
        private SQLiteDataReader sqlite_datareader;

        
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                sqlite_conn = new SQLiteConnection("Data Source=database.db;Version=3;New=True;Compress=True;");

                sqlite_conn.Open();

                sqlite_cmd = sqlite_conn.CreateCommand();

                sqlite_cmd.CommandText = "CREATE TABLE test (id integer primary key, text varchar(100));";
                sqlite_cmd.ExecuteNonQuery();

                Stopwatch watch = new Stopwatch();
                watch.Start();
                for (int i = 0; i < 100; i++)
                {
                    sqlite_cmd.CommandText = "INSERT INTO test (id, text) VALUES (" + i.ToString() + ", 'Test');";
                    sqlite_cmd.ExecuteNonQuery();
                }
                watch.Stop();
                this.label1.Text = "time:" + watch.ElapsedMilliseconds.ToString() + " ms";

                sqlite_conn.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);  
            }
        }

Es sollte also einfach mal 100 einträge in eine leere Datenbank eintragen und die Zeit messen. Das dauert bei mir 13 Sekunden. Das ist doch der Hammer.

Nutze ich eventuell völlig veraltete Verison von SQLite oder einfach eine zu alte Anbindung in c#? Das muss doch schneller gehen, ich dachte so an ca. 1000-2000 Einträge pro Sekunde.

Bitte um Hilfe

10.12.2008 - 10:14 Uhr

Was sollte dann gehen? Sprich geht es dann wenn ich autosizemode.Fill einstelle?
Wo stell ich dann aber die Minimum Size jeder Column ein?
Oder meinst du das anders?

10.12.2008 - 08:11 Uhr

Ich hab jetzt schon viele Kombinationen ausprobiert, leider noch nicht die richtige gefunden. Mein Vorhaben:

Ich hab eine DGV welche Ihr Größe dynamisch an die Ihr umgebene Form anpasst. Jetzt will ich das die columns die komplette Breite der DGV ausnutzen. Das geht ja eigentlich mit autosizemode.Fill. Nur ist das Problem wenn die DGV zu kleine ist dann macht es die nicht breit genug, sprich dann soll es natürlich so sein das eine scrollbar eingefügt wird. Also eine Art Fill, nur soll man eine MIN Größe jeder Column einstellen können. Weis leider nicht wie das geht.

Hat einer eine Idee?

Alle Columns auf DisplayedCell und die letzte auf Fill geht zwar sieht aber scheiße aus, weil wenn DGV zu groß dann nimmt die letzte Spalte den Restlichen Platz den es ja auf alle Spalten aufteilen soll.

09.12.2008 - 14:11 Uhr

Die einfachere Lösung wäre allerdings die Spalte deines DataSets auf DateTime zu setzen, dann kannst du auch ein eigenes Format anzeigen lassen, und die Spalte soertiert sich selber richtig (da vom Type DateTime)!

Sagte ich doch, du kannst dir eigene Formate definieren oder die vorgefertigten nehmen, da ist ein altdeutsches drin "D".

09.12.2008 - 11:06 Uhr

Das Problem ist nicht nicht ganz so leicht zu lösen. Entweder du baust deine SQLite DB um, das deine Column dort ein DateTime ist, oder du musst das sortieren selber überschreiben. Dazu im Designer rechtsklick auf das DGV und dann edit columns. Dort kann man das bei Sort "programmly" einstellen.

Die einfachere Lösung wäre allerdings die Spalte deines DataSets auf DateTime zu setzen, dann kannst du auch ein eigenes Format anzeigen lassen, und die Spalte soertiert sich selber richtig (da vom Type DateTime)!

08.12.2008 - 10:24 Uhr

Ich nehme an mit


DataGridView.FirstDisplayedCell

wird auch der horizontale scrollbar mit gesetzt. D.h. links oben ist dann die entsprechende Zelle zu sehen.
Zu der unterschiedlichen Benamung noch mal, es ist halt manchmal mühsellig das man die komplette MSDN oder die intelecence durchsuchen muss, um etwas zu finden was bei einem anderen Control das selbe macht, nur leider anders heißt. Aber es gibt schlimmeres, nämlich wenn es gar nicht implementiert wäre 😃

07.12.2008 - 23:16 Uhr

Habs grad selber gefunden.


DataGridView1.FirstDisplayedScrollingRowIndex

Komisch warum die das nicht einheitlich machen, das heißt warum das beim ListView anders heißt als beim DataGridView.

07.12.2008 - 23:12 Uhr

Bei dem ListView Control gibt es die Methode EnsureVisible, um zu einem Item zu scrollen (programmtechnisch). Gibt es eine ähnliche Methode bei dem DataGridView auch, um bei vielen Einträgen des DGV's zu einem bestimmten Item zu scrollen?

05.12.2008 - 20:07 Uhr

Also das mit dem e.InheritedRowStyle.BackColor = Color.Red; funzt ja irgendwie nicht. Aber wenn man im OnPrePaint event die this.Rows[e.Rowindex].Cells[..].Style.BackColor = Color.Red setzt dann funzt das.

THX

05.12.2008 - 18:27 Uhr

Also den 1.ten Fehler habe ich gefunden. Und zwar hätte ich das viel früher sehen müssen. Ich lösche am anfang das gesamte dataset mit


dataset1.clear();

Das ist natürlich schwachsinn, ich darf ja nur die table löschen, und als ich die 2te DGV füllte hat es mir natürlich die erste zerschossen. Der Fehler ist mir leider früher nicht aufgefallen weil die DGV nahezu Zeitgleich gefüllt werden. Sonst hätte ich das eher mitbekommen. Zu dem Begin und End Init das war ein kopier Fehler, das war/its bei mir auf die selbe Table gegangen.

Zur 2ten Sache. Wenn ich die OnRowPrePaint() Methode überschreibe, dann geht das so nicht. Das hat keine Auswirkung auf das malen.


        protected override void OnRowPrePaint(DataGridViewRowPrePaintEventArgs e)
        {
            e.InheritedRowStyle.BackColor = Color.Red;
            base.OnRowPrePaint(e);
        }

Jetzt sollten ja eigentlich alle Rows Hintergrundfarbe Red habe. Leider geht das so nicht. Was mache ich falsch?

05.12.2008 - 13:59 Uhr

Ich schau mal vielleicht werden die Inits in faslscher reihenfolge aufgerufen (begin und end) oder an falschen tables. Mit dem PrePaint event wird sicher funzen.

05.12.2008 - 08:34 Uhr

Danke für eure zahlreichen posts. Ich werd also denk ich SQLite nehmen. Das mit den umlauten wird schon passen, ich teste das mal und poste dann meine Erfahrungen. Zu guten Tutorials, da hab ich bis jetzt noch keine Zeit für gehabt, aber werd die auch noch posten.

05.12.2008 - 08:29 Uhr

Ich benutze 2 GridView's und leite die mir ab um sie zu personalisieren. Beide sind im Grundaufbau gleich, ist sowieso nicht viel drin, und werden mit einer DataBindingSource gefüttert, einzig die Sourcen sind andere (1te 13 Columns, und 2te 19 Columns). Sie bieten 2 öffentliche Methoden eine FillGrid und Clear. Nun füll ich einfach in der FillGrid wie folgt.


         this.dataSet1.Clear();
         dataSet1.Numb.BeginLoadData();
         for (int i = 0; i < RowCount ; i++) {
            this.dataSet1.Table1.AddNumbRow(....);
         }
         dataSet1.Table1.EndLoadData();      

Nun 1tes Problem:

Beide Grid's nutzen jeweils einen Source und haben diesen auch gebunden. Nun fülle ich beide Grids mit Daten, aus berechnungen. Jetzt kommt etwas was ich nicht verstehe und eine Stunde damit verbracht habe es zu suchen aber nix gefunden habe. Die eine DGV zeigt die Daten an, die andere nicht. Beim debuggen ist mir aufgefallen, das BEIDE beim füllen tatsächlich ca. 100 Rows in der dataset.entsprechenden Table drin stehen haben. (Beide arbeiten auf dem selben dataset, nur 2 Tables also DGV1 auf Table1 und DGV2 auf Table2) Jetzt muss ich mich ja nicht um das füllen kümmern, weil ja die Source sich selber an die DGV gebunden hat, beim Initialisieren.

Jetzt dacht ich mir vielleicht hat der Designer mal wieder scheiße gebaut, also löscht du schnell die eine DGV raus, die welche nicht funktionierte und auch die BindingSource, und dann habe ich eine neues DGV (mein eigenes halt) reingezogen und ihr die Databinding.table zugewiesen. Das selbe, die eine zeigt es an die andere nicht. Und ich verstehe überhaupt nicht warum...!

2 Problem.

Ich möchte beim befüllen dei entsprechenden Zeilen (rows) mit einer entsprechenden Hintergundfarbe füllen die ich erst beim füllen weis. Nun wollt ich einfach nach dataSet1.Table1.EndLoadData(); alle this.Rows durchgehen und den Hintergrundfarbe manuell setzen. Problem nur ist das hat keine Auswirkung. Wie macht man das am besten?

Wer rat weis bitte posten.
THX

04.12.2008 - 15:31 Uhr

Ist keine Webanwendung! Und umlaute brauch ich allerdings. Inwieweit gab es Fehler dazu, beim schreiben oder lesen der DB?

Wichtig ist für mich das die DB embedded ist, also man kein Server oder so braucht, das heißt einfach eine dll einbinden, dann kann man die Anwendung leicht sharen.

Turorials poste ich noch, zumindest die die brauchbar sind.

04.12.2008 - 13:40 Uhr

Da das SQLite kostenlos nehm ich erstmal das. Kennt einer dazu ein gutes Turorial in Verbindung mit dem Studio (DB erstellen, ins Projekt einbinden, connection etc)?