Schönen guten Tag!
Ich habe mir ein paar "div's" erstellt und sie per CSS positioniert und gestaltet. Meine Seite habe ich bisher immer mit dem IE6 ausprobiert. Nun wollte ich mir mal meine Seite im Firefox 2 anschauen und musste festellen, dass er mir nicht alles richtig positioniert hat. Ich habe meine "div's" eigentlich direkt untereinander positioniert, doch zwischen meinen oberen und mittleren "div" ist nun beim FF2 eine kleine Lücke dazwischen.
Nun zu meine Frage:
Erstellt man für die verschiedenen Browser jeweils eine eigene CSS-Datei und wenn ja, wie kann man dann jeweils diesen Browser abfragen und ihm die passende CSS-Datei zuweisen (per Codebehind)?
Ich benutze AJAX und habe auf meiner Seite das "Accordion"-Control platziert. Darin habe ich jeweils zu den verschiedenen Menüpunkten, LinkButtons zur Navigation hinzugefügt. Hinter jedem LinkButton habe ich einen Zeilenumbruch (</br>) eingefügt. Im IE6 klappt dass auch wunderbar, nur im FF2 nimmt er diesen gar nicht an. Gibt es dort eine andere Möglichkeit einen Zeilenumbruch zu erstellen?
Schon mal vielen Dank im Voraus!
Gruß
Echo
Das einzige, was dich AJAX kostet, ist die zusätzliche Zeit, die du zum entwicheln brauchst
Das nehme ich gern in Kauf, denn das was ich bis jetzt gesehen habe, sah doch sehr vielversprechend aus! 🙂
Danke für eure Hilfe!
Gruß
Echo
Hi, erstmal danke für deine Antwort!
Ich meine hier dieses Toolkit und die Extensions AJAX Toolkit
Ich denke doch, dass es diese kostenlose Version ist, oder?
Gruß
Echo
Hallo!
Ich wollte mich jetzt ein wenig mit AJAX beschäftigen und habe dazu noch eine Frage:
Kostet mich AJAX etwas und kann ich z.B. dieses AJAX Toolkit, sprich die Controls, ohne weiteres nutzen und müßte ich, falls ich das dann mal später verkaufen will, irgendwelche Lizenzgebühren für diese Controls bezahlen?
Gruß
Echo
Hi!
Ich möchte gerne, dass man bestimmte Zeichenfolgen (bei mir jetzt ein Datenbankpfad) zentral in einem geschützten Bereich meiner Website eingeben kann. Nun habe ich mir eine globale Resouce - Datei erstellt und möchte darin meinen Pfad abspeichern, aber versuche ich ihn nun einen Wert zuzuweisen, wird mir gesagt, dass diese Datei schreibgeschützt ist.
Wo und wie kann man denn solche Werte speichern oder war der Ansatz mit den Resourcen schon richtig?
Hatte versucht es so zuzuweisen:
Resources.Resource.DataPath = TextBox2.Text.ToString():
Gruß
Echo
Es klappt einwandfrei! Danke dir!
Gibt es dazu eine Seite, wo z.B. solche Unterschiede aufgelistet sind oder woher weißt du das?
Gruß
Echo
Hi, ich bins wieder!
Also, dass Problem mit dem "onmouseover" habe ich gelöst. Damit er auch im Firefox den Cursor als "Hand" anzeigt, wenn ich mich über einer Zeile befinde, muss der Style des Cursors so lauten:
string sMouseOver = "this.style.color='blue', this.style.cursor='pointer'";
Jetzt habe ich nur noch das Problem beim "onclick" - Attribut! Im IE geht er auf die nächste Seite und zeigt mir meine PDF an, aber im Firefox tut sich beim Klicken auf die Zeile gar nichts.
Hoffe einer von euch kann mir helfen!
Gruß
Echo
Hallo!
Ich habe ein GridView, indem ich Daten aus einer Datenbank anzeigen lasse. In der Datenbank speichere ich PDF-Dokumente und ich möchte, dass bei einem Klick auf eine Zeile im GridView, das jeweilige Dokument geöffnet wird. Ich hatte es die ganze Zeit mit dem IE 6.0 ausprobiert und das hat auch funktioniert, nur es geht leider nicht mit dem Firefox (FF 2.0.0.6).
Ich habe im "RowDataBound" - Ereignis des GridViews, die Attribute fürs "onmouseover" und "onclick" usw. angegeben, aber klicke ich im GridView auf eine Zeile tut sich leider nichts.
Hier mal mein Code:
protected void gdvDocuments_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
string sMouseOver = "this.style.color='blue', this.style.cursor='hand'";
string sMouseOut = "this.style.color='black'";
e.Row.Attributes.Add("onmouseover", sMouseOver);
e.Row.Attributes.Add("onmouseout", sMouseOut);
e.Row.Attributes.Add("onclick", "window.navigate('Document.aspx?id=" + e.Row.Cells[0].Text.ToString() + "')");
}
}
Habt ihr auch schon mal sowas gehabt und wenn ja, was und wie müsste man dann anpassen?
Danke schonmal im Voraus.
Gruß
Echo
Hallo!
Erstmal danke für deine Antwort, aber das Problem tritt immer noch auf!
Die Seite bleibt zwar weiß, aber es befindet sich um diese Seite ein dünner Rahmen und mein Button wird nicht angezeigt bzw. wohl verdeckt.
Klicke ich auf den Button und führe dann erst meine Methode durch, dann klappt es! Außerdem habe ich mal das "Button_Click" - Ereignis im "Page_Load" ausführen lassen, aber da macht er dann leider wieder nichts.
MfG
Echo
Habe ich jetzt gemacht und wie greife ich jetzt auf die Seite zu (von außen)?
http://Computername/Aliasname/
Wenn du keine Startseite im IIS festgelegt hast, dann glaube ich so
http://Computername/Aliasname/Default.aspx
MfG
Echo
Wo lege ich ein wvirtuelles Verzeichnis an ?
Systemsteuerung-->Verwaltung-->Internet-Informationsdienste-->Websites---> rechte Maustaste auf Standardwebsite--->NEU--->virtuelles Verzeichnis
MfG
Echo
Machen tut er anscheinend wohl was!
Es ist ein dünner Rahmen um meine Seite und ich hatte mal zu Testzwecken einen Button auf die Seite platziert, aber der ist nicht mehr zu sehen.
MfG
Echo
Ich meinte halt im VS2005 über "Erstellen"--->"Webseite veröffentlichen".
Hast du das auch so gemacht?
MfG
Echo
Hallo!
Hast du deine Seite denn schon veröffentlicht und auf'n IIS oder dergleichen gelegt?
MfG
Echo
Ja, ich möchte das man die gesamte Zeile anklicken kann!
Breakpoints hatte ich vorhin schon gesetzt und in der Variable "dID" steht die richtige Zahl drin und er geht auch komplett durch die gesamte Methode durch ohne Fehler!
Das SqlStatement ist auch soweit richtig, da steht nachher am Ende drin "WHERE ID = 2".
Auf der richtigen Seite befinde ich mich auch...."Document.aspx?id=2".
Ich habe momentan echt keine Idee.
MfG
Echo
P.S.
Benutze für eine solche Aufgabe besser ein HttpHandler -> *.ashx.
Hättest du diesbezüglich vielleicht ein Beispiel?
Hier nochmal der Code der Methode, die ich ausführen möchte:
private void _ShowTheFile(int FileID)
{
string SQL = "SELECT Filesize, FileData, FileContentType FROM Daten WHERE ID = " + FileID.ToString();
strConnection = ConfigurationManager.
ConnectionStrings["conDataBase"].ConnectionString;
dbConn = new SqlConnection(strConnection);
cmd = new SqlCommand(SQL, dbConn);
dbConn.Open();
SqlDataReader dbRead = cmd.ExecuteReader();
dbRead.Read();
Response.Clear();
Response.ContentType = (string)dbRead["FileContentType"];
byte[] data = (byte[])Convert.ChangeType(dbRead["FileData"], typeof(byte[]));
int zahl = (int)Convert.ChangeType(dbRead["Filesize"], typeof(int));
Response.OutputStream.Write(data, 0, zahl);
dbConn.Close();
Response.End();
}
Hallo!
Ich bin gerade dabei zu realisieren, dass wenn man auf eine Zeile eines GridViews klickt, sich eine neue Seite öffnet und die "ID" des selektierten Datensatzes mit übergeben wird. Das klappt auch soweit alles. Die hinterlegten Daten wären ".pdf" und evtl. auch ".doc" Dateien. Jetzt rufe ich im "Page_Load" - Ereignis direkt die Methode auf zum Öffnen des Dokuments, aber da tut sich leider nichts. Wenn ich die Methode zum Öffnen, aber erst ausführe, wenn ich auch auf einen Button klicke, dann klappt es wunderbar.
Hier mal mein Code, wie ich die "ID" des Datensatzes übergebe:
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
(
e.Row.Attributes.Add("onclick", "window.navigate('Document.aspx?id=" + e.Row.Cells[0].Text.ToString() + "')");
}
Und mein "Page_Load" - Ereignis der andern Seite sieht so aus:
protected void Page_Load(object sender, EventArgs e)
{
string sRecords = Request.QueryString["id"];
int dID = Convert.ToInt32(sRecord);
_ShowTheFile(dID);
}
Habt ihr vielleicht ne Ahnung woran das liegen kann? Muss ich die Methode in ein anderes Ereignis packen?
MfG
Echo
Jo, danke hat funktioniert.
Jetzt kann ich z.B. ".pdf" - Dateien, die ich zuvor auch in einer Datenbank gespeichert habe öffnen.
Eine Frage hätte ich aber noch:
Wie kann ich es realisieren, dass für die PDF nicht die komplette Seite in Anspruch genommen wird? Ich würde gerne die PDF nur in einem vordefinierten Bereich öffnen wollen, z.B. auf der rechten Seite in einem "ContentPlaceHolder".
MfG
Echo
Hallo!
Ich bin gerade dabei, hochgeladene Dateien in einer Datenbank abzuspeichern, was auch ganz gut klappt! Nun möchte ich aber einen Datensatz aus der Datenbank auslesen und angezeigt bekommen! Dabei bekomme ich aber immer einen Fehler:
"InvalidCastException" "Die angegebene Umwandlung ist ungültig."
Der Quellcode den ich benutze, um das alles mal zu testen ist von Codeproject, aber ich komme momentan einfach nicht auf die Lösung!
Hier mal der Code:
private void ShowTheFile(int FileID)
{
string SQL = "SELECT FileSize, FileData, FileContentType FROM Daten WHERE FileID = "
+ FileID.ToString();
SqlConnection dbConn = new SqlConnection(GetConnectionString());
SqlCommand dbComm = new SqlCommand(SQL, dbConn);
dbConn.Open();
SqlDataReader dbRead = dbComm.ExecuteReader();
dbRead.Read();
Response.Clear();
Response.ContentType = (string)dbRead["FileContentType"];
// In der nächsten Zeile bei "FileData" tritt der Fehler auf
Response.OutputStream.Write((byte[])dbRead["FileData"], 0, (int)dbRead["FileSize"]);
dbConn.Close();
Response.End();
}
Den Wert von "FileData" habe ich mir vorher beim Upload über "fileUpload.FileBytes" geholt und danach in ein Feld "varbinary(MAX)" in die Db geschrieben!
Danke schonmal im Voraus!
Gruß
Echo
Hi,
vielen Dank erstmal für eure Antworten! Ich werd dann mal schauen, dass ich das mit Hilfe eurer Tipps hinbekomme! 🙂
Gruß
Echo
Hallo!
Ich habe mir, um ein wenig mit dem Login "rumspielen" zu können einfach ein Projekt erstellt mit zwei WebForms. Und zwar habe ich mir meinen eigenen Login gebaut mit zwei Textboxen usw.! Bei einem erfolgreichen Login erstelle ich eine neue "Session" und übergebe ihr den aktuellen Usernamen. Das klappt auch alles soweit wunderbar, nur jetzt ist mir aufgefallen, dass wenn ich direkt am Anfang halt einfach die URL des gesicherten Bereichs angebe, ohne mich eingeloggt zu haben, auf diese Seite ohne weiteres zugreifen kann!
Wie könnte man denn soetwas verhindern?
Gruß
Echo
Danke erstmal für deine schnelle Antwort! 👍
Ich habe jetzt deinen Code-Schnipsel mal eingefügt und habe nachher die erstellte TextBox in mein Projekt eingefügt, aber es tut sich leider nichts.
Hier mal der Code von meiner Bibliothek:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebControlLibrary1
{
[DefaultProperty("Text")]
[ToolboxData("<{0}:mTextBox runat=server></{0}:mTextBox>")]
public class mTextBox : System.Web.UI.WebControls.TextBox
{
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
public string Text
{
get
{
String s = (String)ViewState["Text"];
return ((s == null) ? String.Empty : s);
}
set
{
ViewState["Text"] = value;
}
}
protected override void RenderContents(HtmlTextWriter output)
{
output.Write(Text);
}
protected override void AddAttributesToRender(HtmlTextWriter writer)
{
writer.AddAttribute("onfocus", "this.Style.backgroundColor = 'yellow'");
writer.AddAttribute("onblur", "this.Style.backgroundColor = 'white'");
base.AddAttributesToRender(writer);
}
}
}
Was mache ich falsch?
Gruß
Echo
Hallo!
Ich habe mir schon für normale Windows-Anwendungen eigene Steuerelemente erstellt durch vererben usw. und nun muß ich auch welche für WebApplikationen erstellen, doch da habe ich momentan ein paar Probleme!
Ich wollte nun in einer "WebSteuerlementBibliothek" ein neues Control erstellen, welches vom Typ "TextBox" abgeleitet ist.
public class WebCustomControl1 : System.Web.UI.WebControl.TextBox
{
.
.
.
}
Ich wollte z.B., dass diese TextBox wie bei "WinForms" beim "Enter-Event" eine andere BackColor und beim "Leave-Event" halt wieder die alte BackColor zugeordnet bekommt. Aber diese Ereignisse gibt es ja alle nicht oder zumindest sehe ich sie nicht bei ASP.NET.
Ich hoffe, ihr könnt mir etwas weiterhelfen. X(
Gruß
Echo
So, geht jetzt! Es muss natürlich so aussehen:
public partial class Form1 : MyOwnForm.UserControl1
{
public Form1()
{
InitializeComponent();
}
}
Ich hatte einen Button und ein Label auf meine TestForm gezogen und diese dann halt jetzt eingebunden! Das Label und der Button sind dann nachher beim Einbinden gesperrt, sehe ich das richtig?
Gruß
Echo
Danke erstmal für deine Antwort! Werde ich gleich mal ausprobieren.
Ich arbeite mit dem Visual Studio 2005 Prof.!
Gruß
Echo
P.S. Habs jetzt ausprobiert und ein "Windows-Steuerelementbibliothek" - Projekt angelegt und es "MyOwnForm" genannt! Dieses "UserControl" habe in "Form" geändert und diese Form dann abgespeichert. Danach habe in einem neuen Projekt "MyOwnForm" als Verweis hinzugefügt und es in der Form1.cs mit
using MyOwnWindow;
eingebunden. Danach habe ich die Klasse "Form1" so umgeändert:
public partial class Form1 : MyOwnForm
{
public Form1()
{
InitializeComponent();
}
}
Aber das geht leider nicht! 🙁
Hi!
Ich bin gerade dabei, mich ein wenig mit den "Erstellen von eigenen Steuerelementen" auseinanderzusetzen. Ein "Klassenbibliotheks"- Projekt habe ich schon erstellt und mir eine eigene TextBox mit verschiedenen Events zusammengebastelt. Die .dll habe ich auch schon eingebunden und alles klappt einwandfrei!
Doch wie kann ich mir nun eine eigene "Form" (mit verschiedenen Eigenschaften oder Steuerelementen drauf) erstellen, damit ich diese dann unter den "Vorlagen" einfach auswählen kann? Mein Ziel ist es dieses "Standardfenster" in meinem Programm zu nutzen und falls mir nachher noch etwas auffallen sollte was ich ändern möchte, dass ich diese Änderung nur einmal vornehmen und nicht in allen Fenstern einzelnd vornehmen muss.
Danke schonmal im Voraus! =)
Gruß
Echo
Hi!
Sehr zu empfehlen ist, falls du es noch nicht kennst, dass openbook von Galileo Computing!
Wär auch nicht schlecht wenn das kompakt geschrieben ist, denn für ein 1000 Seiten Buch hab ich keine Zeit.
Also, ein wenig Zeit muß man schon dafür aufbringen!!!
Wünsch dir jedenfalls viel Erfolg!
Gruß
Echo
Ich denke ja mal, dass ich auch ein neues "InterfaceType" für die ContactItems erstellen muss, so wie für "Application", oder?
Sprich sowas wie "Outlook.ContactItem"!
oType = System.Type.GetTypeFromProgID("Outlook.ContactItem");
oApp = System.Activator.CreateInstance(oType);
Das geht ja schon mal nicht! In der zweiten Zeile zeigt er nämlich einen Fehler an:
"Der Wert darf nicht NULL sein. Parametername: type"
Gruß
Echo
Hat keiner ein Tipp für mich? X(
Gruß
Echo
Hallo!
Ich versuche gerade per LateBinding Kontakte in Outlook anzulegen und komme gerade net so recht weiter! Ich habe mir ein Fenster mit TextBoxen usw. erstellt in denen ich die einzelnen Werte, wie z.B. "LastName" usw. eingeben möchte. Ich habe mir mal das Beispiel in der MSDN angeschaut und weiß nicht, wie ich z.B. folgende Zeile in LateBinding umwandle:
Outlook.ContactItem newContact = (Outlook.ContactItem) this.CreateItem(Outlook.OlItemType.olContactItem);
Danach müßte ich ja die einzelnen Werte aus den TextBoxen per "SetProperty" in die jeweiligen Eigenschaften schreiben, so wie es halt in der MSDN (EarlyBinding)
newContact.FirstName = "Jo";
steht, oder?
Meine Verbindung zu Outlook habe ich so realisiert:
oType = System.Type.GetTypeFromProgID("Outlook.Application");
oApp = System.Activator.CreateInstance(oType);
appName = (string)_GetProperty(oApp, "Name");
string Build = (string)_GetProperty(oApp, "Version");
oNamespace = _InvokeMethod(oApp, "GetNamespace", "MAPI");
Ich hoffe, dass einer von euch mir einen Tipp geben kann! Thx
Gruß
Echo
Hallo!
Also wenn du willst, dass dein Programm nicht nur mit einer bestimmten Office - Version laufen soll, dann musst du LateBinding benutzen!
Gruß
Echo
Hmmmm......Hast du mein Code denn auch mal genauso wie er da steht ausprobiert?
int anzahl = myDataGridView.Rows.Count;
for (int i = 0; i <= anzahl-1; i++)
{
MessageBox.Show(myDataGridView.Rows[i].Cells[deineZelle].Value.ToString());
}
Gruß
Echo
Hi!
Ich bin mir jetzt zwar nicht ganz sicher, aber versuch mal mit ner for-Schleife durchzugehen.
Ermittel die Anzahl an vorhandenen Rows
Alle vorhandenen Rows durchgehen und dir jeweils die Zelle ausgeben lassen, die du haben willst
Kann es jetzt leider nicht selber ausprobieren, aber ich hoffe es hilft dir weiter.
Gruß
Echo
So, vielleicht hilft dir das weiter, ist aber ungetestet:
int anzahl = myGridView.Rows.Count;
for (int i = 0; i <= anzahl-1; i++)
{
MessageBox.Show(myGridView.Rows[i].Cells[deineZelle].Value.ToString());
}
Hallo!
Ich hole mir per LateBinding die Kontakte aus Outlook in mein Programm und lasse sie mir in einem DataGridView anzeigen.
Meine Frage ist nun: Wie kann ich, wenn ich ein paar Daten eines Kontaktes in meinem Programm geändert habe, die auch in Outlook übernehmen? Ein "Update"-Befehl o.ä. habe ich da jetzt nicht gefunden!
Oder würde es so gehen, dass ich nach dem Ändern einen neuen Kontakt anlege, indem ich dann die einzelen Werte eintrage, sowie auch die "EntryID" des geänderten Kontaktes. Sodass er ihn vielleicht "überschreibt"?
Einen neuen Kontakt hinzufügen habe ich schonmal gemacht, allerdings noch per EarlyBinding!
Hilfe!!! 😉
MfG
Echo
Ich habe mich jetzt nocheinmal etwas umgeschaut und etwas von einer "EntryID" gelesen, könnte man das evtl. darüber machen?
Gruß
Echo
Hallo!
Ich arbeite gerade mit den Kontakten aus Outlook und lasse sie in meinem Programm ausgeben. In meinem Programm soll der Benutzer dann die Kontakte auswählen können, welche in eine Db geschrieben werden sollen. Nun wollte ich aber, damit der Benutzer nicht zweimal den gleichen Kontakt übernehmen kann, überprüfen ob der jeweilige Kontakt schon bereits in der Datenbank besteht oder nicht!
Man sagte mir schon bereits, dass Outlook für jeden Kontakt eine GUID anlegt.
Nun zu meiner Frage: Wie könnte ich wie bisher nicht nur die Kontaktdaten, sondern auch die GUID des Kontaktes mit übernehmen?
Gruß
Echo
Danke für den Tipp!
Wie komme ich denn an die GUID von den einzelnen Kontakten?
Habe die Privatdaten benutzt, sprich HomeAddressStreet usw., aber finden tue ich nichts mit GUID!
Gruß
Echo
Hallo!
Ich schreibe gerade eine kleine Adressdatenbank für mich so zum üben. Ich hole mir ein paar Daten (Kontakte) aus Outlook und kopiere sie bei mir in ein DataGridView. Danach kann ich nun die Personen markieren, die ich gerne in meine Datenbank schreiben würde. Das klappt auch alles wunderbar, doch jetzt habe ich ein kleines Problem. Wie kann man es realisieren, das man die gleiche Person nicht zweimal in die Datenbank übernehmen kann? Falls der Benutzer es durch Zufall mal machen sollte, sollte dann z.B. eine MessageBox angezeigt werden ("Person xy wurde schon übernommen!").
Hier mal ein Ausschnitt aus meinem Code:
Int32 selectedRowCount =
myGridView.Rows.GetRowCount(DataGridViewElementStates.Selected);
if (selectedRowCount > 0)
{
// Öffnen der Verbindung
con.Open();
cmd.Connection = con;
for (int i = 0; i < selectedRowCount; i++)
{
cmd = con.CreateCommand();
// Werte aus den Zellen den Variablen übergeben
sNachname = myGridView.SelectedRows[i].Cells[0].Value.ToString();
sVorname = myGridView.SelectedRows[i].Cells[1].Value.ToString();
sStrasse = myGridView.SelectedRows[i].Cells[2].Value.ToString();
// Aufruf Methode
_SetInsertCommand();
cmd.CommandText = sql;
try
{
// Ausführen der SQL-Anweisung
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
// Verbindung wird geschlossen
con.Close();
}
else
{
MessageBox.Show("Bitte markieren Sie einen Datensatz!", "Info",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
Ich hoffe ihr habt ein paar Anregungen für mich! 🙂
Gruß
Echo
Das Problem ist nur, ich muss meine Daten in eine ADS-Datenbank schreiben und dann in ein anderes Programm wieder importieren, welches mit VO geschrieben wurde, sprich dieses hat keine DataSets!
MfG
Echo
Erstmal danke für eure Tipps!
warum benutzt Du nicht Parameter.
Das habe ich mich auch vorhin gefragt! Habe jetzt die Parameter hinzugefügt und es läuft 1A! 😁
Eine kurze Frage hätte ich da noch! Das ganze soll nachher drauf hinauslaufen, dass die Daten in einer temporäre Datenbank geschrieben werden sollen und nachher von einem anderen Programm wieder eingelesen werden. Und wenn das passiert ist, kann die Datenbank wieder gelöscht werden.
Gibt es irgendwelche Beispiele, bei denen man eine Datenbank erstellt, Daten reinschreibt und nachher wieder löscht?
MfG
Echo
Hallo!
Ich brauche mal (wieder) eure Hilfe!
Ich importiere mir Daten aus Outlook und möchte sie gleichzeitig auch in eine DB schreiben!
Das klappt auch soweit, nur ist es noch ein wenig umständlich, denn ich importiere den ersten Datensatz (schreibe ihn dann in die Datenbank) und danach gehe ich mit einer "while - Schleife" durch die restlichen Datensätze durch und schreib sie in die DB!
Ermittle ich vorher nicht den ersten Datensatz, so bekomme ich in der "while-Schleife" nämlich immer einen Datensatz zu wenig raus!
Könnte man meinen Code so umschreiben, dass ich nur noch einmal "cmd.ExecuteNonQuery()" ausführen muß? Weiß im Moment nicht mehr weiter! 🙁
Ich hoffe ihr könnt mir ein paar Tipps geben!
// Das erst Element bekommen
oAppItem = (MSOutlook.ContactItem)oItems.GetFirst();
// Öffnen der Verbindung
con.Open();
string sql = "INSERT INTO Kontakte (Nachname, Vorname, Straße, PLZ, Ort) " + "VALUES ('" + oAppItem.LastName + "','" + oAppItem.FirstName + "','" +
oAppItem.HomeAddressStreet + "','" + oAppItem.HomeAddressPostalCode + "','" + oAppItem.HomeAddressCity + "');";
cmd = con.CreateCommand();
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
dsImportItems.Tables[0].Rows.Add(new object[] {
oAppItem.LastName, oAppItem.FirstName, oAppItem.HomeAddressStreet,
oAppItem.HomeAddressPostalCode, oAppItem.HomeAddressCity});
// durch alle "Kontakte" durchgehen und Zelle mit den Daten des Elements
// hinzufügen
while ((oAppItem = (Outlook.ContactItem)oItems.GetNext()) != null)
{
dsImportItems.Tables[0].Rows.Add(new object[] {
oAppItem.LastName, oAppItem.FirstName, oAppItem.HomeAddressStreet,
oAppItem.HomeAddressPostalCode, oAppItem.HomeAddressCity});
sql = "INSERT INTO Kontakte (Nachname, Vorname, Straße, PLZ, Ort) " +
"VALUES ('" + oAppItem.LastName + "','" + oAppItem.FirstName + "','" +
oAppItem.HomeAddressStreet + "','" + oAppItem.HomeAddressPostalCode + "','" +
oAppItem.HomeAddressCity + "');";
cmd = con.CreateCommand();
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
}
// Benutzer meldet sich ab und beendet die aktuelle Benutzersitzung
oNS.Logoff();
// Schließen der Verbindung
con.Close();
MfG
Echo
@juetho
Ja, sry! Ich habs jetzt aber selber lösen können!
Mein Problem war, dass nach dem reinschreiben von Werten und verlassen der jeweiligen Textbox, nicht direkt der Wert im DataGridView angezeigt wurde!
Hier mal der Code (vielleicht hilft es ja irgendjemanden?):
private void TextBox_Leave(object sender, EventArgs e)
{
TextBox oTXT = (TextBox)sender;
string cName = oTXT.Name.ToString();
switch (cName)
{
case "textBox1":
myCurrencyManager.EndCurrentEdit();
dataadapter.Update(ds.Tables["Test"]);
break;
case "textBox2":
myCurrencyManager.EndCurrentEdit();
dataadapter.Update(ds.Tables["Test"]);
break;
}
}
Eine Frage hätte ich jetzt aber noch!
Ich führe ja jetzt jedes Mal ein "dataadapter.Update" aus und das läuft auch soweit bei meinen wenigen "Testdaten", aber gibt es da noch eine andere Möglichkeit, als meine da oben? Denn meine Lösung wird bei vielleicht 400.000 Datensätzen ziemlich langsam werden, wenn ich jedesmal nach dem Verlassen einer Textbox ein "Update" durchführe.
Gruß
Echo
Hallo!
Ich habe ein DataGridView (woran ich ein DataView drangehangen habe) und zwei Textboxen, wo ich meine Daten anzeigen lasse. Das Reinschreiben und das Löschen der Daten in einer Datenbank klappt soweit.
Nun zu mein Problem:
Wenn ich in der ersten Textbox etwas reinschreibe oder einen Wert ändern möchte so wird beim Verlassen der Textbox nicht automatisch die Datenzelle in meinem DataGridView aktualisiert, sondern erst wenn ich ins DataGridView hineinklicke und evtl. einen anderen Datensatz selektiere.
Kann man das DataView aktualisieren oder ähnliches, um dieses Problem zu lösen?
Danke schonmal im Voraus!
Gruß
Echo
Dank deinem Tipp habe ich es hinbekommen! 👍
Gruß
Echo
Hallo!
Ich möchte gern in meinem DataGridView selektierte Zeilen löschen können, aber da komme ich momentan leider nicht weiter.
Ich weiß nämlich leider nicht, wie ich den Index der selektierten Zeile herausbekomme, damit ich die Zeile dann löschen kann.
Hier mal ein kleiner Ausschnitt aus meinem Code:
string strSql = "DELETE FROM Kunden WHERE ID=@ID";
cmd = new SqlCommand(strSql, con);
cmd.Parameters.Add("@ID", SqlDbType.Int, 5, "ID").Value = textBox1.Text;
....
....
....
In der TextBox habe ich nur zu Testzwecken immer die ID des Datensatzes eingegeben, um zu schauen, ob das Löschen überhaupt funktioniert!
Wäre für jede Hilfe dankbar! 🙂
Gruß
Echo
Hallo!
Ich schreibe gerade zu Testzwecken ein kleines Programm in dem ich "Kundendaten" eingeben kann. Die Daten lasse ich jeweils in Textboxen und einem DataGridView ausgeben.
Lösche oder lege ich einen neuen Datensatz an, so aktualisieren sich nicht die Daten in den Textboxen. Also lösche ich einen Datensatz, so verschwindet er zwar in meiner Tabelle aber nicht in den Textboxen. Wie kann man dieses "Binding" aktualisieren?
Hatte versucht die DataBindings nochmal zuzuweisen, aber da bringt er mir folgenden Fehler:
"Dies führt dazu, dass sich zwei Bindungen der Auflistung an dieselbe Eigenschaft binden. Parametername: binding"
Hoffe ihr könnt mir helfen!
Gruß
Echo
Ich meine damit, dass ich einfach meine beiden Datenbankdateien (.mdf) in meinem Projektordner habe möchte und nicht die Datenbanken unter "C:\Programme\MSSQL...." z.B., wenn ich sie im Management Studio erstelle.
Das ganze soll dazu dienen, wenn ich mein Projekt anstatt zu Hause mal irgendwo anders ausprobieren oder weiter dran arbeiten möchte, dass ich nur ein Ordner habe mit allen Sachen drin die ich zum weiterarbeiten brauche!
Das hat bei mir nämlich noch nicht geklappt, wenn ich die Datenbankdateien bei mir in dem Projektordner (App_Data) über "rechte Maustaste--> Vorhandenes Element hinzufügen --> SQL-Datenbank" erstelle. Die Testverbindung ist zwar erfolgreich, aber er bringt mir immer diesen Fehler, wenn ich die Seite erstellen will:
"Die von der Anmeldung angeforderte "Test"-Datenbank kann nicht geöffnet werden. Fehler bei der Anmeldung.
Ich hoffe, du verstehst mich jetzt ein wenig besser! 😉
MfG
Echo
Hallo!
Ich versuche zur Zeit ein wenig in ASP.NET 2.0 rumzuprobieren und habe da eine Frage!
Ich habe in meinem Projekt zwei Datenbankdateien im "App_Data" Ordner erstellt und Daten eingegeben. Doch wie kann ich nun auf die Daten zugreifen? Ich hatte es vorher so gemacht, dass ich die zwei Datenbanken im SQL-Server Management Studio erstellt habe und da klappte der Zugriff! Ich habe sie natürlich auch alle gleich benannt!
Ich wollte es halt jetzt mal so ausprobieren, da ich halt alle meine benötigten Dateien im Projektordner haben wollte und nicht die Datenbanken irgendwoanders.
Mein ConnectionString usw. sieht so aus:
string Constr= "server=Programmierung;Trusted_Connection=yes;database=Test";
SqlConnection conn = new SqlConnection(Constr);
conn.Open();
SqlCommand cmd = new SqlCommand("SELECT * FROM Test", conn);
SqlDataReader reader = cmd.ExecuteReader();
gv.DataSource = reader;
gv.DataBind();
conn.close();
Ich hoffe ihr könnt mir helfen!
MfG
Echho
Hallo Atlan!
Meinst du so?
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "DELETE FROM Adresse WHERE ID=@ID";
cmd.Parameters["@ID"].Value = "ID";
cmd.ExecuteNonQuery();
Vielleicht vertue ich mich ja da, aber er bringt mir leider wieder einen Fehler! 🙁
"SqlParameter mit ParameterName '@ID' ist nicht in SqlParameterCollection enthalten."
Gruß
Echo