Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von Capi
Thema: Drucken über mehrere Seite klappt nicht
Am im Forum: Rund um die Programmierung

Hallo zusammen,

ich habe schon sehr viele Artikel über das Drucken gelesen aber leider komme ich nicht weiter.

Ich habe in einem Datagrid mehrere Einträge und möchte jede Zeile aus dem Datagrid auf eine neue Seite drucken.

Leider druckt mir der Drucker alle Seiten auf eine Seite übereinander. Ich komme einfach nicht drauf warum es nicht auf verschiedene Seiten verteilt wird.

Es sieht so aus als ob der Drucker nicht mitbekommt, dass er eine neue Seite erstellen soll.

Wäre toll wenn mir jemand einen Tip hat, wo mein Fehler liegt.

Vielen Dank.


 private void printDocumentRMA_PrintPage(object sender, PrintPageEventArgs e)
        {
//Für jedes Gerät
            for (int i = 0; i < dataGridViewRMADevices.Rows.Count - 1; i++)
            {
                
                

                int iTabText = 55;
                int iLeftSide = 13;
                float fCountLine = 110;
                e.Graphics.PageUnit = GraphicsUnit.Millimeter;
                RectangleF rectFPapier = e.MarginBounds;
                
                Pen oPen = new Pen(Brushes.Black,0.3F);
                
                FontFamily myFontFamily = new FontFamily("Arial");
                Font oFont = new Font(myFontFamily, 3, FontStyle.Bold, GraphicsUnit.Pixel);
                Font myFontBold = new Font(myFontFamily, 8, FontStyle.Bold, GraphicsUnit.Pixel);
                Font oFontNormal = new Font(myFontFamily, 4, FontStyle.Regular, GraphicsUnit.Pixel);
                Font oFontUnderline = new Font(myFontFamily, 2, FontStyle.Underline, GraphicsUnit.Pixel);



                
                //Info Reparaturbegleitschreiben
                e.Graphics.DrawString("Reparaturbegleitschreiben", myFontBold, Brushes.Black, 50, 115);
                fCountLine = 130;
                //Daten Reparatur (Datum, Email, Telefon, Fax)
                e.Graphics.DrawRectangle(oPen, 10, fCountLine-2, 180, 27);
                e.Graphics.DrawString("Datum:", oFont, Brushes.Black, iLeftSide, fCountLine);
                e.Graphics.DrawString(dateTimePickerRMA.Value.ToShortDateString(), oFont, Brushes.Black, iTabText, fCountLine);
                fCountLine+=5;
                e.Graphics.DrawString("Ansprechpartner:", oFont, Brushes.Black, iLeftSide, fCountLine);
                e.Graphics.DrawString(textBoxRMAAnsprechpartner.Text.Trim(), oFont, Brushes.Black, iTabText, fCountLine);
                fCountLine+=5;
                e.Graphics.DrawString("E-Mail:", oFont, Brushes.Black, iLeftSide, fCountLine);
                e.Graphics.DrawString(textBoxRMAEMail.Text.Trim(), oFont, Brushes.Black, iTabText, fCountLine);
                fCountLine+=5;
                e.Graphics.DrawString("Telefon: ", oFont, Brushes.Black, iLeftSide, fCountLine);
                e.Graphics.DrawString(textBoxRMATelefon.Text.Trim(), oFont, Brushes.Black, iTabText, fCountLine);
                fCountLine+=5;
                e.Graphics.DrawString("Fax:", oFont, Brushes.Black, iLeftSide, fCountLine);
                e.Graphics.DrawString(textBoxRMAFax.Text.Trim(), oFont, Brushes.Black, iTabText, fCountLine);
                fCountLine+=10;

                //Daten Gerät
                float fLineStart = fCountLine;
                e.Graphics.DrawString("Seriennummer:", oFont, Brushes.Black, iLeftSide, fCountLine);
                e.Graphics.DrawString (dataGridViewRMADevices.Rows[i].Cells ["Seriennummer"].Value.ToString().Trim(), oFont, Brushes.Black, iTabText, fCountLine);
                fCountLine+=5;
                
                //Fehlerbeschreibung
                string sTempSonstiges = "";
                
                if (dataGridViewRMADevices.Rows[i].Cells["Error_KD"].Value.ToString().Length ≤ 50)
                {
                    e.Graphics.DrawString("Fehlerbeschreibung: ", oFont, Brushes.Black, iLeftSide, fCountLine);
                    e.Graphics.DrawString (dataGridViewRMADevices.Rows[i].Cells ["Error_KD"].Value.ToString(), oFont, Brushes.Black, iTabText, fCountLine);
                    fCountLine += 5;
                }
                else
                {
                    sTempSonstiges = dataGridViewRMADevices.Rows[i].Cells["Error_KD"].Value.ToString();
                    //ist größer als 50 dann unterteilen
                    if (sTempSonstiges.Length > 0)
                    {
                        string sTemp = "";
                        e.Graphics.DrawString("Fehlerbeschreibung: ", oFont, Brushes.Black, iLeftSide, fCountLine);
                        int iCount = 0;
                        //mehr als 50 
                        while (true)
                        {
                            //dann die ersten 50 Zeichen drucken
                            sTemp = CutLongString(sTempSonstiges, 50);
                            e.Graphics.DrawString(sTemp.Trim(), oFont, Brushes.Black, iTabText, fCountLine);
                            //existieren umbrüche ja dann erhöhen den Druckbereich
                            iCount = CountChar(Environment.NewLine, sTemp);
                            if (iCount > 0)
                            {
                                //mehrer Einträge gefunden
                                for (int j = 0; j ≤ iCount; j++)
                                {
                                    fCountLine = fCountLine + 5;
                                }
                            }
                            //danach den bereits gedruckten Teil löschen
                            sTempSonstiges = sTempSonstiges.Remove(0, sTemp.Length);
                            if (sTempSonstiges.Length ≤ 50)
                            {
                                fCountLine = fCountLine + 5;
                                //drucken
                                e.Graphics.DrawString(sTempSonstiges.Trim(), oFont, Brushes.Black, iTabText, fCountLine);
                                fCountLine = fCountLine + 5;
                                // und Schleife beenden
                                break;
                            }
                            fCountLine = fCountLine + 5;
                        }

                    }
                }
                //Rectangle für Seriennummer... Variable größe
                

                //Zubehör                
                e.Graphics.DrawString("Zubehör:", oFont, Brushes.Black, iLeftSide, fCountLine);
                e.Graphics.DrawString (dataGridViewRMADevices.Rows[i].Cells ["Zubehoer"].Value.ToString().Trim(), oFont, Brushes.Black, iTabText, fCountLine);
                float fErgebnis = fCountLine - fLineStart;

                e.Graphics.DrawRectangle(oPen, 10, fLineStart-2, 180, fErgebnis+7);

                //Hinweis Kostenvoranschlag
                fCountLine += 10;
                e.Graphics.DrawRectangle(oPen, 10, fCountLine-2, 180, 17);
                e.Graphics.DrawString("Hinweis:", oFont, Brushes.Black, iLeftSide, fCountLine);
                e.Graphics.DrawString("Gewährleistungsfall, andernfalls wird ein Kostenvoranschlag benötigt! Kostenvoranschlag", oFont, Brushes.Black, iTabText, fCountLine);
                e.Graphics.DrawString("für alle Einzelkomponenten und Überprüfungen zusammengefasst unter der Seriennummer", oFont, Brushes.Black, iTabText, fCountLine += 5);
                e.Graphics.DrawString("des Gerätes.", oFont, Brushes.Black, iTabText, fCountLine += 5);

                //TEST
                fCountLine += 10;
                e.Graphics.DrawRectangle(oPen, 10, fCountLine-2, 180, 8);
                e.Graphics.DrawString("TEST-RMA:", oFont, Brushes.Black, iLeftSide, fCountLine);
                e.Graphics.DrawString(textBoxRMANumberWAROK.Text, oFont, Brushes.Black, iTabText, fCountLine);

                fCountLine += 10;
                
                //RMA Hersteller
                if (dataGridViewRMADevices.Rows[i].Cells["RMAHersteller"].Value.ToString().Length > 0)
                {
                    e.Graphics.DrawRectangle(oPen, 10, fCountLine - 2, 180, 8);
                    e.Graphics.DrawString(oDataHersteller.Rows[0]["Unternehmen"].ToString() + " - RMA:", oFont, Brushes.Black, iLeftSide, fCountLine);
                    e.Graphics.DrawString (dataGridViewRMADevices.Rows[i].Cells["RMAHersteller"].Value.ToString(), oFont, Brushes.Black, iTabText, fCountLine);
                    fCountLine += 10;
                }
                

                //Erklärung
                e.Graphics.DrawRectangle(oPen, 10,fCountLine+3, 180, 15);
                e.Graphics.DrawString("Bitte senden Sie das defekte Gerät an die oben genannte Empfänger-Adresse.", oFont, Brushes.Black, iLeftSide, fCountLine += 5);
                e.Graphics.DrawString("Legen Sie das Reparaturbegleitschreiben zu den Versandunterlagen.", oFont, Brushes.Black, iLeftSide, fCountLine += 5);

                if (i == (dataGridViewRMADevices.Rows.Count - 2))
                {
                    //Ende der Liste erreicht.
                    e.HasMorePages = false;
                }
                else
                {
                    //Seite zu Ende-Seite drucken
                    e.HasMorePages = true;                    
                }

            }
}

Thema: Zwei Bytes in Short/Int umwandeln
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo zusammen,

ich habe 2 bytes mit jeweils einem Hexwert:
mybyte[0] = 0xB3;
mybyte[1] = 0x20;

Nun möchte ich, dass Array in die Zahl umwandeln Wenn ich diese Werte in den Taschenrechner eingebe, erhalte ich die Zahl 45856.

Aber wie bekomme ich es in C# hin? Wenn es nur ein byte wäre dann könnte man ja einfach ein int davor schreiben aber bei zwei bytes?

Habe versucht das ganze so zu bewerkstelligen:
int iNumber = (int)0xB3 + 0x20;

Aber dann bekomme ich nur eine falsche Zahl.

Weiss jemand wie man das bewerkstelligen kann?
Hab da leider keine Ahnung wie ich das wandeln kann.

Bin für jede Hilfe dankbar.

Thema: CF Serial Port Close
Am im Forum: Rund um die Programmierung

Hallo habe das ganze Forum und auch schon google durchsucht doch leider ohne Erfolg.

Ich habe eine Software erstellt (C#, VS2005, CF 2.0) die eine serielle Schnittstelle öffnet und die Daten in einer Textbox ausgibt.
Ich habe nun an den seriellen Port eine GPS-Mouse gehängt, die durchgehend Daten auf den Port schickt.

Mein Problem ist nun, dass wenn ich die Schnittstelle wieder schließen möchte dies nicht geschieht und sich das Programm aufhängt.

Im Anhang findet ihr mein komplettes Projekt. Ich habe bereits versucht mit BeginInvoke zu arbeiten aber leider ohne Erfolg.

Beim Schließen meines Ports erhalte ich nach gewisser Zeit nachdem ich den Close Befehl geschickt auch einen StackOverflow. Dies erhalte ich dann in DoUpdateRS232Port1().


private void Form1_Load(object sender, EventArgs e)
        {
            serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(serialPort1_DataReceived);
            serialPort1.DtrEnable = true;
            //comboBoxComPort.SelectedIndex = 1;
            //comboBoxParity.SelectedIndex = 2;
            //comboBox1.SelectedIndex = 3;
            UpdateHandler = new EventHandler(DoUpdateRS232Port1);

            textBoxSend.Text = "F";
        }


 void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            try
            {
                ReadLineBuffer = serialPort1.ReadLine();
                this.BeginInvoke(UpdateHandler);
            }
            catch
            { }
        }

public void DoUpdateRS232Port1(object s, EventArgs e)
        {
            

                //bEnd = true;
                //int x = serialPort1.ReadByte();
                //byte[] myByte = new byte[serialPort1.BytesToRead];
                //serialPort1.Read(myByte, 0, serialPort1.BytesToRead);
                //string stest = serialPort1.ReadExisting();
            //textBoxInfo.Text = textBoxInfo.Text + stest;// Encoding.Default.GetString(myByte, 0, myByte.Length);
            //textBoxInfo.SelectionStart = textBoxInfo.Text.Length;
            //textBoxInfo.ScrollToCaret();
            //Application.DoEvents();
            textBoxInfo.Text += ReadLineBuffer;// Encoding.Default.GetString(myByte, 0, myByte.Length);
            ReadLineBuffer = "";
            textBoxInfo.SelectionStart = textBoxInfo.Text.Length;
            textBoxInfo.ScrollToCaret();
            Application.DoEvents();
           
        }


private void Form1_Closing(object sender, CancelEventArgs e)
        {
            if (serialPort1.IsOpen == true)
            {
                try
                {
                    serialPort1.DataReceived -= new System.IO.Ports.SerialDataReceivedEventHandler(serialPort1_DataReceived);
                    //Thread.Sleep(1000);
                    string bla = serialPort1.ReadExisting();
                    serialPort1.Close(); //Error

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

Thema: ComboBox DataSource
Am im Forum: Datentechnologien

Hi,

weiss jetzt leider grad nicht was du mit DropDownlist meinst - hab die nicht gefunden oder meinst du Listbox? Ich würd aber mal probieren den Wert Text zu belegen, vielleicht hilft dies ja schon.

gruss andi

Thema: Setupprojekt CAB
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo,

bin gerade dabei eine Setupdatei für ein mobiles Gerät zu erstellen. Ich registriere Treiber von FTDI um auf dem mobilen Gerät aus einem USB mehrere RS232 Schnittstellen zu generieren. Nun hab ich aber das Problem, das ich ja bei der Registrierung die COM Schnittstellen nicht kenne, die automatisch vom mobilen Gerät vergeben werden. Die bräuchte ich aber, da an RS232 Ports Modem angeschlossen werden und ich diese ebenfalls für die Auswahl auf dem mobilen Gerät sichtbar machen möchte:

Hier mal die Registryeinträge die ich mache:

[RegKeys]
"HKLM","ExtModems\FzghWAPort1","DeviceType","0x00010001","1"
"HKLM","ExtModems\FzghWAPort1","FriendlyName","0x00000000","Port Replikator C"
"HKLM","ExtModems\FzghWAPort1","Port","0x00000000","COM5:"
"HKLM","ExtModems\FzghWAPort3","FriendlyName","0x00000000","Port Replikator A"
"HKLM","ExtModems\FzghWAPort3","Port","0x00000000","COM7:"
"HKLM","ExtModems\FzghWAPort3","DeviceType","0x00010001","1"
"HKLM","ExtModems\FzghWAPort2","Port","0x00000000","COM6:"
"HKLM","ExtModems\FzghWAPort2","FriendlyName","0x00000000","Port Replikator B"
"HKLM","ExtModems\FzghWAPort2","DeviceType","0x00010001","1"

"HKLM","Drivers\USB\FTDI_DEVICE","Dll","0x00000000","ftdi_ser.dll"
"HKLM","Drivers\USB\LoadClients\1027_24577\Default\Default\FTDI_DEVICE","Dll","0x00000000","ftdi_ser.dll"
"HKLM","Drivers\USB\FTDI_DEVICE_6001","LatencyTimer","0x00010001","16"
"HKLM","Drivers\USB\FTDI_DEVICE_6001","Index","0x00010001","7"
"HKLM","Drivers\USB\FTDI_DEVICE_6001","Prefix","0x00000000","COM"
"HKLM","Drivers\USB\FTDI_DEVICE_6001","Dll","0x00000000","ftdi_ser.dll"
"HKLM","Drivers\USB\FTDI_DEVICE_6001","DeviceArrayIndex","0x00010001","5"
"HKLM","Drivers\USB\FTDI_DEVICE_6001","InitialIndex","0x00010001","5"
"HKLM","Drivers\USB\FTDI_DEVICE_6001","Version","0x00000000","1.0.2.9"
"HKLM","Drivers\USB\ClientDrivers\FTDI_DEVICE","Dll","0x00000000","ftdi_ser.dll"

Wie ihr seht ist mein Problem bei den ExtModems wie kann ich dies nun bewerkstelligen, dass er zur Laufzeit d.h. wenn das mobile Geräte die Ports erhält entsprechend die Modemports vergibt?

Danke für die Hilfe
Gruss Andi

Thema: CF CPU Verbrauch
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi,

der Link nutzt leider nicht, da hier auch wieder auf das richtige SDK bezug genommen wird.

Aber trotzdem Danke

Weiss jemand eine Implementierung der Methode GetProcessTimes(...) für das Compact Framework?`

Thema: CF CPU Verbrauch
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo bin jetzt schon länger auf der Suche nach einer Lösung doch leider habe ich bis jetzt nichts gefunden. Und zwar bin ich auf der Suche nach einer Lösung die CPU Auslastung zu erhalten und zwar im Compact Framework 2.0. Ich will einen Taskmanager ähnlich wie bei Windows XP wo alle Prozesse mit zugehöriger Speicherbelegung und CPU Zeit angezeigt werden.

Habe im Inet GetThreadTimes gefunden doch leider bekomme ich die Umsetzung nicht hin.

Hoffe jemand weiss rat oder kann mir einen Link geben wo dies jemand schon umgesetzt hat.

mfg Andi

Thema: CF Methode API Shell_NotifyIcon()
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo ich hab es jetzt ein bisschen was gefunden was eigentlich funktionieren sollte aber leider wird das TrayIcon nicht angezeigt weiss jemand warum?


// Extract icon from the application's exe
			// This requires that app icon were set in the project properties
			string szPath = Assembly.GetExecutingAssembly().GetModules()[0].FullyQualifiedName;
			ExtractIconEx(szPath, 0, 0, ref hIcon, 1);

			// Fill NOTIFYICONDATA with data
			NOTIFYICONDATA nid = new NOTIFYICONDATA();

			// In our struct definition we have omitted emebedded wchar array size 64 - we need to account for it
			int cbSize = Marshal.SizeOf(nid) + 64 * Marshal.SystemDefaultCharSize;

			// Allocate memory
			IntPtr pData = LocalAlloc(LPTR, cbSize);
			
			// Set fields of the NOTIFYICONDATA (see SDK documentation)
			nid.cbSize = cbSize;
			nid.hIcon = hIcon;
			nid.hWnd = LocalAlloc(LPTR,Marshal.SizeOf(this));
			nid.uCallbackMessage = 0;
			nid.uID = 1;
			nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
			Marshal.StructureToPtr(nid, pData, false);

			// Add tooltip
			char[] arrTooltip = "My tooltip".ToCharArray();
			Marshal.Copy(arrTooltip, 0, (IntPtr)(pData.ToInt32() + Marshal.SizeOf(nid)), arrTooltip.Length);
			
			// Register with shell
			bool ret = Shell_NotifyIcon(NIM_ADD, pData);

			//Free memory
			LocalFree(pData);



Thx
andi

Thema: CF Methode API Shell_NotifyIcon()
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo Leute,

versuche gerade verzweifelt bei einem Compact Framework 1.1 Projekt ein NotifyIcon in der Taskbar zu erzeugen. Habe hierzu die API Methode Shell_NotifyIcon() gefunden aber leider komme ich damit nicht zurecht.

Mein bisheriger Code:


[DllImport("coredll.dll")]
internal static extern int Shell_NotifyIcon(int dwMessage, ref NOTIFYICONDATA pnid);

struct NOTIFYICONDATA
{
	int cbSize;
	IntPtr hWnd;
	int uID;
	int uFlags;
	int uCallbackMessage;
	IntPtr hIcon;
	char mychar;
}

Tja und hier fängt nun mein Problem an, wie kann ich denn dies nun in C# realisieren? Kennt jemand eine Seite wo man ein Beispiel findet, habe leider nichts gefunden

Vielen Dank für die Hilfe
Andi

Thema: Text senden an ein Fenster
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Nach langem Suchen habe ich jetzt herausgefunden, dass ich das ganze mit WindowsMessage realisieren muss. Doch leider bekomme ich es nicht hin, diese Nachricht zusammenzubasteln, dass man einen string mit übermitteln kann.


string  myTest = "Mein Text";
			Message msg = Message.Create((IntPtr)HWND_BROADCAST,1,new IntPtr(*myTest),(IntPtr)1);
			MessageWindow.PostMessage(ref msg);


Was muss ich denn nun umstellen damit dies funktioniert?

Mfg
Andi

Thema: Text senden an ein Fenster
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Tag zusammen,

ich möchte in einem Compact Framework 1.1 Projekt einen string an ein Fenster schicken. Hierbei wird ein RFID Tag ausgelesen von meinem Programm das im Hintergrund läuft. Daraufhin wird dann die ausgelesene Tag ID an das aktuell aktive Fenster geschickt z.B. in eine Textbox.

Wie bekomme ich das hin?

THX
Andi

Thema: RowGUID Update
Am im Forum: Datentechnologien

Hallo Svenson,

du hattest recht es liegt am UpdateCommand. Jetzt ist aber mein Problem, dass ich mehrer rowguid Spalten habe, die upgedatet werden müssen. Hatte den Aufbau nur zu vereinfachen reingeschrieben. der richtige aufbau:

rowguid(Primary), Freitext, Datum, rowguidBenutzer, rowguidMaterial, rowguidLeistung

jetzt ist natürlich das Problem, wenn ich die anderen rowguid Spalten in meinem updateCommand belassen, dann kommt die fEhlermeldung ebenfalls.

Hier mal mein UpdateCommand:

UPDATE tblAuftrag SET DatumSoll = @DatumSoll, DatumIST = @DatumIST, Freitext = @Freitext, rowguid = @rowguid, Dauer = @Dauer, rowguidLeistung = @rowguidLeistung, rowguidMaterial = @rowguidMaterial, rowguidStatus = @rowguidStatus, rowguidDevice = @rowguidDevice, rowguidBenutzer = @rowguidBenutzer WHERE (rowguid = @Original_rowguid); SELECT DatumSoll, DatumIST, Freitext, rowguid, Dauer, rowguidLeistung, rowguidMaterial, rowguidStatus, rowguidDevice, rowguidBenutzer FROM tblAuftrag WHERE (rowguid = @rowguid)

wenn ich sie rausnehme,dann updatet er sie aber nicht was kann ich denn nun machen?

Mfg
Andi

Thema: RowGUID Update
Am im Forum: Datentechnologien

Hi,

will ein Update auf die folgende Tabelle mit einem DataAdapter machen:

Aufbau: rowguid(Primary),Bezeichnung,Artikel
Updatebefehl:

ofrmMain.sqlDataAdapterAuftrag.Update(ofrmMain.dsGesamt,"tblAuftrag");

ich verändere nun den Name und möchte dies nun speichern aber dann kommt die Fehlermeldung: "Das Aktualisieren von Spalten mit der rowguidcol-Eigenschaft ist nicht zulässig."

Wie kann ich denn das jetzt umgehen? ich verändere die rowguid doch gar nicht oder?

THX
Andi

Thema: Programm beendet sich ohne Grund
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

ich habe eine Software in C# für Windows erstellt. Die Software läuft auf einem Windows Server 2003 und verbindet sich hier über die serielle Schnittstelle mit einem Modem und ruft hierüber LKW Daten ab. Nun ist das Problem, das wenn ich das Programm nicht im Debugger Modus laufen lassen, das Program sich einfach beendet, ohne Fehlermeldung. Ich habe schon versucht die Prozesspriorität hochzusetzen usw. aber leider hat es nichts gebracht.

Weis jemand woran das liegen könnte?

THX
Andi

Thema: Merge Replikation SqlServerCE
Am im Forum: Datentechnologien

So hab das jetzt noch einmal probiert. Und die Fehlermeldung kam beim hinzufügen der Row zur DataTable also erstelle ich jetzt die rowguid selber mit System.Guid.NewGuid() und weise sie zu. Dann funktioniert es einwandfrei

Danke für die Hilfe
Andi

Thema: Merge Replikation SqlServerCE
Am im Forum: Datentechnologien

@Sera

ich dachte eigentlich auch das alles automatisch durchgeführt wird und die AutoID egal ist. Aber wahrscheinlich hab ich was falsch gemacht oder habe einen Fehler in der Merge Replication.

Wie müsste ich denn das ganze aufbauen? und wie müsste dann die Tabelle aussehen, sowie die Tabelle dann beim veröffentlichen?

Tabellenstruktur:

IDLeistung
Bezeichnung

z.B.:

0
Fließen legen

MFG
Andi

Thema: Sql Server DataSet
Am im Forum: Datentechnologien

INSERT INTO BEFEHL(generiert von Visual Studio):

INSERT INTO tblLeistung(Bezeichnung, rowguid) VALUES (@Bezeichnung, @rowguid); SELECT IDLeistung, Bezeichnung, rowguid FROM tblLeistung WHERE (IDLeistung = @@IDENTITY)

Tabellenstruktur:

Tabelle Leistung:
IDLeistung (PrimaryKey)
Bezeichnung
rowguid

ist das die Tabellenstruktur wo du meinst?

Thema: Sql Server DataSet
Am im Forum: Datentechnologien

Hi,

wie aus den anderen Post´s ersichtlich, versuche ich gerade eine MergeReplikation mit einem SQL Server hinzubekommen und darauf dann per mobilem Gerät und mit einer Anwendung vom PC drauf zuzugreifen.

Jetzt nach lange probieren bin ich daraufgekommen, dass ich vermutlich mit dem PC Programm (erstellt in C#) nicht auf die Hauptdatenbank(auf der alle Daten zusammengeführt werden, Mobile Daten und Daten von der PC Software) auf dem SQL Server zugreifen darf. Also habe ich ich jetzt noch eine zweite DB angelegt, die als Subscriber fungiert. Auf diese verlinke ich nun meine PC Anwendung.

Nun ist aber mein Problem, dass bei der Replikation der sQL Server eine rowguid einfügt, diese ist Datentyp "uniqueidentifier".

Wenn ich nun etwas speichern möchte, dann kommt die fehlermeldung rowguid darf keine null enthalten, ist mir auch klar da dies ja als identifizierung dient aber eigentlich erstellt diese guid der Server. Nun ist die Frage wie bekomme ich denn nun diese guid? und kann es dem DataSet übergeben?

Tabelle sieht so aus:

ID | Bezeichnung | rowguid
0 Stein 16 hex Wert (automatisch generiert von der DB

Danke für eure Hilfe bin gerade schwer am verzweifeln. X( X(

Andi

Thema: Merge Replikation SqlServerCE
Am im Forum: Datentechnologien

Hallo,

folgendes Problem habe eine Software auf einem mobilen Gerät geschrieben, dieses holt sich die DB von einem SQL Server per Merge Replication.

So mein Problem ist nun, dass der sqlserverce die falschen AutoID´s hochzählt und zwar sieht er die bereits gelöschten AutoID´s nicht die es bereits auf dem Server gibt

z.B.

Auf dem SqlServer angelegt: 1,2,3,4,5,6,7,8,9...20
dann wurde auf dem SqlServer die Zahlen: 2,3,4 gelöscht
dann führe ich eine Update zum mobilen Gerät aus und hier wird nun alles in die Sql Server Ce Datenbank eingetragen.

Wenn ich jetzt im mobilen gerät nun eine neue Zeile einfügen will, dann geht er hin und nimmt dann die autoid 2 (eigentlich müsste er 20 eintragen) die ja dann frei ist beim mobilen gerät aber auf dem sql server bereits vergeben und gelöscht wurde.


Jetzt ist das auch kein Problem aber beim nächsten einfügen wird die autoid auf 3 erhöht, dann 4 so danach erhöht er die autoid auf 5 aber die ist ja bereits vergeben, somit es nun zu einer Exception. Nun ist meine Frage, wie kann ich dem SqlServerCe 2 sagen, dass er bei der AutoID bei 20 anfangen soll-> da ja höchste ID und somit muss er hier fortlaufen?

Danke Andi

Thema: Datenbank Tabelle Normalform?
Am im Forum: Rund um die Programmierung

Hallo

ich schreibe gerade an meine Studienarbeit und nun ist mein Problem, dass ich nicht genau weiss in welcher Normalform genau meine Tabelle sich befindet.

Kann mir das jemand sagen?

Tabellenaufbau:
Kundennummer(Primärschlüssel)
Bezeichnung
PLZ
Ort

Jetzt will ich in der Arbeit schreiben, dass man das ganze auch weiter Normalisieren hätte können, aber da ist die Frage in was für einer Normalform nun dies wieder ist. Sieht wie folgt aus:

3 Tabellen.

1. Tabelle Kunde Aufbau:
Kundennummer (Primärschlüssel)
Bezeichnung

2. Tabelle Zwischentabelle:
Kundennummer
OrtsID

3. Tabelle Ort:
OrtsID
PLZ
Ort

Danke für eure Hilfe
Andi

Thema: DataSet aktuell halten?
Am im Forum: Datentechnologien

Hallo,

leider sind auf den Tabellen bereits Primärschlüssel festgelegt.

Mfg
Andi

Thema: DataSet aktuell halten?
Am im Forum: Datentechnologien

Hallo,

ich habe eine MSDE laufen und hierauf meine DB.

Nun habe ich eine Software auf dem PC und eine auf einem mobilen Gerät.

Beide Gerät greifen auf die gleiche datenbank zu das mobile Gerät hierbei über Merge Replikation.

Nun ist meine Frage wie bekomme ich es hin, dass meine Software auf dem PC immer die aktuellen Daten vom Server erhält. Ich habe die gesamten Tabellen in einem DataSet, wie kann ich nun diese Tabellen einfach und Schnell aktualisieren.

Ich hatte gedacht man könnte einfach ein 2. Fill ausführen aber das funktioniert nicht da macht er mir einfach noch einmal die gleichen Einträge dazu.

Mfg
Andi

Thema: Absturz beim Umschalten zw. Tab-Seiten?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

hallo,

falls es am umschalten liegt:
setzt doch eine Sperrvariable solange deine Aktualisierung läuft oder disable die Tab Reiter solange.

MFG
Andi

Thema: SqlDataAdapter Update Schreibgeschützt
Am im Forum: Datentechnologien

Hallo,


habe jetzt das Problem entdeckt Die Funktion automatisch die ID zu erhalten, macht der DataAdapter bereits und ich muss es nicht extra machen. Also ist meine Abfrage unnötig. Deshalb ist vermutlich auch die Spalte IDDevice schreibgeschützt.

Also hat sich erledigt, manchmal ist der DataAdapter doch schlauer als gedacht

MFG
Andi

Thema: SqlDataAdapter Update Schreibgeschützt
Am im Forum: Datentechnologien

Hallo,

habe eine MSDE (Desktop Engine) Server bei mir laufen mit einer entsprechenden DB für meine Anwendung.

Ich habe hier die Tabelle Device. Aufbau: IDDevice(AutoID), Bez, Standort,... usw.

Das ganze habe ich nun im meinem Programm mit einem DataSet und dem hinzufügen der Tabelle device realisiert. Insert, Update usw. funktioniert einwandfrei über SqlDataAdapter. Nun möchte ich aber da die Datenbank von mehrern Clients angesprochen wird, das die Autoid immer richtig ist also habe ich wie bei OleDbDataadapter im Event RowUpdated versucht die aktuell vergeben ID zu ermitteln:


if (e.StatementType == StatementType.Insert) 
{ 
  System.Data.SqlClient.SqlCommand cmd = new   System.Data.SqlClient.SqlCommand("SELECT @@IDENTITY",sqlConnection); 
  // in Tabelle abspeichern 
  e.Row["IDDevice"]=Convert.ToInt64(cmd.ExecuteScalar()); 
} 

führe ich dies aber nun aus dann kommt die Fehlermeldung, dass die Spalte IDDevice schreibgeschützt wäre. Kann mir jemand sagen woran das liegt? Ich finde es leider nicht heraus. ich erhalte vom ExecuteScalar auch die richtige ID zurück da besteht nach meiner Ansicht auch nicht das Problem sonder eher im DataSet aber wo kann man da eine Spalte den Schreibschutz verpassen?

Ich habe die Tabelle Device an ein DataGrid gehängt. ich habe aber bereits probiert, vor dem reinschreibeversuch (e.Row..) diese zu entkoppeln hat aber auch nichts gebracht.

Weiss jemand was da schief läuft?

Danke für jede Hilfe

Andi

Thema: DataGrid
Am im Forum: GUI: Windows-Forms

Hallo,

ich versuche gerade eine Tabelle in einem DataGrid anzuzeigen. Hierbei ist die Tabelle mit Fremdschlüsseln bestückt so z.B. MaterialID. Nun würde ich gerne, dasss anstatt der MaterialID(z.B.:1) jetzt der Klartext kommt der in der Tabelle Material steht z.B. Bügeleisen.

Wie kann man das realisierien? oder muss ich mir eine eigene Tabelle zusammenbasteln und dann dem DataGrid übergeben?

Vielen Dank für die Antworten

MFG
Andi

Thema: DataSet Tabelle Update Problem
Am im Forum: Datentechnologien

Hallo,

ich habe eine Anwendung programmiert, die von mehreren Benutzern gleichzeitig verwendet wird. Hierbei verwende ich eine ACCESS Datenbank, diese Relational aufgebaut. So ich habe nun ein Projekt und hierzu verschiedene Aufgaben gelöst durch tblProjekt->Zwischentabelle->tblAufgaben. dies habe ich auch im DataSet mit Relationen nachgebildet und ich kann auch alles wunderbar benutzen. Mein Problem ist aber nur, wenn ich eine neue Aufgabe anlege, wird in der DB automatisch eine AufgabenID generiert. Jetzt sieht es aber so aus, das diese Zahl nicht mit der Zahl in meinem Datasettabelle übereinstimmt also in der DB ID = 44 in meiner Datasettabelle ID = 35 somit kann er nun natürlich nicht die Zwischentabelle updaten, da die Zahl nicht existiert.

Hier mal der Code:


DataRow myRowNew = oDSGesamt.tblAufgabe.NewRow();
myRowNew["Betreff"] = myRowNeueStAufgabe[0]["Bezeichnung"];
myRowNew["PrioritätID"] = 0;
myRowNew["Beginn"] = DateTime.Now;
myRowNew["Fällig"] = DateTime.Now.AddMinutes(Convert.ToInt32(myRowNeueStAufgabe[0]["FolgeZeit"]));
myRowNew["Erinnerung"] = false;
myRowNew["MNr"] = oConfig.SetGetAktMitarbeiter;
myRowNew["PermanenteErinnerung"] = false;
myRowNew["ZeiteinheitID"] = 0;
myRowNew["Status"] = false;
oDSGesamt.tblAufgabe.Rows.Add(myRowNew);
//dann dem Projekt zuweisen
DataRow myRowNewRel = oDSGesamt.tblProjektAufgabe.NewRow();
myRowNewRel["PID"] = oConfig.SetGetAktProjektID;
myRowNewRel["AufgabeID"] = myRowNew["AufgabeID"];
oDSGesamt.tblProjektAufgabe.Rows.Add(myRowNewRel);

//jetzt Updaten gegenüber der DB
oleDbDataAdapterAufgabe.Update(oDSGesamt,"tblAufgabe");
//__--> hier tritt der Fehler auf da die AufgabeID nicht existiert
oleDbDataAdapterProjektAufgabe.Update(oDSGesamt,"tblProjektAufgabe");
oDSGesamt.AcceptChanges();


Weiss jemand wie man ihm die richtige Zahl/AufgabenID übergeben kann? Oder mache ich hier etwas vollkommen falsch?

Hier noch der Update Befehl:
für Tabelle Aufgabe:
UPDATE tblAufgabe SET Beginn = ?, Betreff = ?, Erinnerung = ?, ErinnerungDatum = ?, Fällig = ?, Kommentar = ?, MNr = ?, PermanentDatum = ?, PermanenteErinnerung = ?, PrioritätID = ?, Status = ?, ZeiteinheitID = ? WHERE (AufgabeID = ?)

für Tabelle ProjektAufgabe:
UPDATE tblProjektAufgabe SET AufgabeID = ?, PID = ? WHERE (LNummer = ?)

MFG
Andi

Thema: ListView Problem
Am im Forum: GUI: Windows-Forms

Hallo,

hier mal Code


//Sortieren
					DataRow[] oRowSortDokumente = oDtAktDokumente.Select("","Datum ASC"); //Funktioniert nicht
					for (int i= 0; i< oRowSortDokumente.Length; i++)
					{
						listViewDokumente.Items.Add(Convert.ToDateTime(oRowSortDokumente[i]["Datum"]).ToShortDateString());
						//jetzt der ListView die Werte zuweisen
						listViewDokumente.Items[i].UseItemStyleForSubItems = false;
						listViewDokumente.Items[i].SubItems.Add(oRowSortDokumente[i]["Pfad"].ToString());
						listViewDokumente.Items[i].SubItems[1].Font = myFontUnderline;
					}


was soll dieser Bezwecken? Die listView soll gefüllt werden und zwar mit Spalte1: Datum Spalte2: mit Dokumentenname und vorher soll es noch sotiert werden nach der Spalte Datum. Nun ist mein Problem, wenn ich das ganze laufen lassen und keine Sortierung reinbaue(DataRow[] oRowSortDokumente = oDtAktDokumente.Select("","") dann wird alles richtig in der ListView angezeigt. Sobald ich aber die sortierung rein mache, wird der Dokumentenpfad nicht mehr angezeigt, dafür wird aber das Datum richtig in der Reihenfolge sortiert.

Weiss jemand was ich hier falsch mache?

THX Andi

Thema: Databinding BindingContext Position setzen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo falls falscher Thread - dann tut es mir leider aber ich wusste nicht genau wohin dieses Thema genau passt.

So mein Problem,

ich mache ein Databinding auf mehrer Textboxen.

Dann laufe ich mit :

this.BindingContext[ds.Tables["tblKunden"]].Position ++;
durch die einzelnen einträge.

Jetzt möchte ich auf einen Eintrag direkt springen und zwar mit einer Suche.
Nehme hierzu einfach ein Select auf die Tabelle da dies schön schnell geht

DataRow[] myRow = fMain.ds.Tables["tblKunden"].Select("KdNo = " + Convert.ToInt32(tbKdNrSuche.Text));
//gefunden dann zuweisen über die AutoID
this.BindingContext[ds.Tables["tblKunden"]].Position = Convert.ToInt32(myRow[0]["ID"].ToString());

Leider funktioniert dies nicht so er findet zwar die richtige Row aber leider stimmt dann die Position nicht und ich bekomme die falschen kundendaten angezeigt.

Wie kann ich denn nun ihm die richtige Position übergeben?

Habe versucht es mit einer for Schleife zu machen also von vorne bis hinten durchlaufen und dann wenn gefunden ihm die Position zu geben aber dies dauert leider bei 5000 Einträgen zu lange.

Also wie kann ich jetzt die aktuelle Zeile ihm übergeben, die gerade ausgewählt wurde?

Früher VB,hatte ich ja mein Recordset und konnte hier mit seek danach suchen und hatte dann die Position der Tabelle auf die er gerade steht -> also die Position

Mfg
Andi

Thema: DataGrid Multiline
Am im Forum: GUI: Windows-Forms

Danke dir Herbivore,

habe es jetzt hinbekommen falls jemand mal das gleiche Problem hat:


protected override int GetMinimumHeight() 
{ 
//_TextBox.Textbox abgeleitet von DataGridTextBoxColumn()
Graphics g = _TextBox.TextBox.CreateGraphics();		
CurrencyManager cur = (CurrencyManager)this.DataGridTableStyle.DataGrid.BindingContext[this.DataGridTableStyle.DataGrid.DataSource,this.DataGridTableStyle.DataGrid.DataMember];
string s = GetColumnValueAtRow(cur,this.DataGridTableStyle.DataGrid.BindingContext[this.DataGridTableStyle.DataGrid.DataSource,this.DataGridTableStyle.DataGrid.DataMember].Position).ToString();
return _TextBox.TextBox.PreferredHeight + (int) g.MeasureString(s,_TextBox.TextBox.Font).Height; 
}