Laden...

Forenbeiträge von Steven85 Ingesamt 99 Beiträge

02.02.2017 - 12:59 Uhr

Hat geklappt. 😃

Ich beende ihn im Grunde nur mit den Button für zurück.

02.02.2017 - 11:59 Uhr

Leider funktioniert es bei mir nicht ganz.


private void btnDetails_Click(object sender, EventArgs e)
{
       // Neue Activity (Form) starten
       Intent oIntend = new Intent(this, typeof(SavedItemsViewActivity));
       oIntend.PutExtra("lstSavedIems", JsonConvert.SerializeObject(lstSavedIems));
       StartActivityForResult(oIntend, Convert.ToInt32(Result.Ok));  
}

protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{   
       base.OnActivityResult(requestCode, resultCode, data);
}

Wenn ich in der neuen Activity den Back Button klicke springt er nicht in das Event.

02.02.2017 - 08:43 Uhr

Hallo zusammen,

ich übergebe eine List<string> an eine neue Activity. In dieser verändere ich diese Liste, z.B. durch hinzufügen oder löschen von Elementen. Wenn ich nun mittels Back Button zurück zur eigentlichen Activity komme will ich diese Einträge wiederum darstellen. Gibt es hierfür ein Event wie z.B. FocusActivity, oder ähnliches? Auf die veränderte Liste komme ich wieder mittels SQLLiteConnection, nur sollen die Werte automatisch dargestellt werden, sobald ich wieder in die entsprechende Activity wechsel.


Intent oIntend = new Intent(this, typeof(SavedItemsViewActivity));
oIntend.PutExtra("lstSavedIems", JsonConvert.SerializeObject(lstSavedIems));
StartActivity(oIntend); 

01.02.2017 - 14:03 Uhr

Vielen Dank für die Antwort.
Gibt es irgendwo ein gutes Tutorial in dem das Ganze in einem Beispiel angewandt wird?

01.02.2017 - 09:15 Uhr

Hallo zusammen,

seit kurzem arbeite ich mit Xamarin in Visual Studio an meiner ersten mobilen App.
Ich habe nun folgendes Problem. In meiner Main Activity habe ich eine SQLiteConnection erstellt.


// SQLConnection in MainActivity
string sPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "SavedItems.sqlite");
SQLiteConnection con = new SQLiteConnection(new SQLitePlatformAndroid(), sPath);
SavedItemRepository repository = new SavedItemRepository(con);

Mittels Button wechsel ich in eine neue Activity in der ich die entsprechenden Daten darstelle.


// Wechsel in neue Activity
Intent oIntend = new Intent(this, typeof(SavedItemsViewActivity));
oIntend.PutExtra("lstSavedIems", JsonConvert.SerializeObject(lstSavedIems));
StartActivity(oIntend); 

In dieser neuen Activity kann ich Einträge aus der Liste entfernen, jedoch habe ich keine Ahnung wie ich diese auch aus der Datenbank lösche.
Das repository Objekt serialisiert zu übergeben an oIntend funktioniert nicht. Wie komme ich nun in der neuen Activity an die SQLLiteConnection, bzw. wie teile ich der MainActivity mit das die entsprechenden Einträge gelöscht werden sollen.

Danke im Voraus.

03.06.2016 - 11:38 Uhr

@gfoidl: Hab es hin bekommen, vielen Dank. 😃

03.06.2016 - 10:53 Uhr

Hallo zusammen, folgendes Problem.

Ich habe die blöde Angewohnheit bei der Tastenkombination Shift + Plus (*) zu 90% immer doch ein Plus zu schreiben. Es ist mittlerweile nur bei dieser Kombination schon zu einer Krankheit geworden die mich schon extrem nervt.

ich möchte dem System allgemein nun sagen das wenn + gedrückt schreibe immer *.
Tasten im Hintergrund auch bei nicht aktivem Fenster abzufangen habe ich schon erreicht:


using System;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Gma.UserActivityMonitor;

namespace StarBug
{
    public partial class SBMain : Form
    {
        public SBMain()
        {
            InitializeComponent();

            HookManager.KeyDown += SBMain_KeyPress; 
        }

        private void SBMain_KeyPress(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Oemplus)
                tbText.Text = "*";
            else
                tbText.Text = String.Format("{0}", e.KeyCode);
        }
    }
}

Mit der Assembly Gma.UserActivityMonitor wird es möglich gemacht.
Jetzt weiß ich aber leider noch nicht wie ich nun im ganzen System, z.B. im SQL Management Studio, erreiche das dort auch der Stern anstelle des Plus geschrieben wird.

Ich hoffe das dies überhaupt möglich ist.

23.03.2016 - 08:04 Uhr

Hallo zusammen,

ich habe eine Konsolenanwendung die eine Webservice Methode aufruft.
Nach genau 5 Minuten und 0 Sekunden landet die Konsolenanwedung in einer Exception:

Fehlermeldung:
System.Net.WebException: Die zugrunde liegende Verbindung wurde geschlossen: Die Verbindung wurde unerwartet getrennt..

In der Konsolenanwendung steht oWS.Timeout auf 600000 (10 Minuten).
Im IIS des Webservers finde ich ebenfalls keine Einstellung die diese 5 Minuten erklären könnten.

Habt ihr eine Idee?

25.12.2015 - 12:19 Uhr

Hi zusammen,

ich bin mir nicht ganz sicher ob das Thema hier korrekt aufgehoben ist.
Folgendes Problem möchte ich gelöst haben:


WebBrowser wbGoogleSearch = new WebBrowser();
wbGoogleSearch.Navigate("https://www.google.de/imghp?q=" + tbTitel.Text + " Cover", true);

Hier möchte ich durch automatisches öffnen des Browsers direkt nach Bildern suchen.
Allerdings muss ich jedes mal noch Enter oder den Suchen Button manuell betätigen.
Gibt es eine Möglichkeit das die Suche direkt ausgeführt wird?

05.11.2015 - 08:39 Uhr

Hallo zusammen,

ich habe ein Problem beim einlesen von CSV Dateien über OleDb.
Folgende Konfiguration verwende ich:


StringBuilder sbConnectionString = new StringBuilder(512);
sbConnectionString.Append("Provider= Microsoft.Jet.OLEDB.4.0;");
sbConnectionString.Append("Data Source=").Append(Path.GetDirectoryName(sFilename)).Append(";");
sbConnectionString.Append("Extended Properties=\"Text;");
sbConnectionString.Append("HDR=Yes;");
sbConnectionString.Append("FMT=Delimited\";");

// Sql-Statement erstellen...
string SqlStatement = "Select * from " + Path.GetFileName(sFilename);

// Datenzugriffsobjekte erzeugen...
OleDbDataAdapter adptSelect = new OleDbDataAdapter(SqlStatement, sbConnectionString.ToString());

// Daten auslesen und zurückliefern...
adptSelect.Fill(dataset);

Kommen jedoch Anführunfszeichen in der Datei vor sieht das ungefähr so aus:

field 1;field 2;field 3;field 4;field 5
field 1;field "2";field 3;field 4;field 5
field 1;field 2;field 3;field 4;field 5

+-------+-------+-------+-------+-------+
| field 1| field 2| field 3| field 4| field 5|
+-------+-------+-------+-------+-------+
| field 1| field
+-------+-------+-------+-------+-------+
| field 1| field2 | field 3| field 4| field 5|
+-------+-------+-------+-------+-------+

Ab der Zelle wo er dieses findet, beendet er diese einfach.
Gibt es eine Möglichkeit Anführungszeichen ganz normal mit einzulesen?

14.08.2015 - 16:26 Uhr

Das war es 😃. Danke dir.

14.08.2015 - 16:16 Uhr

Habe ich eigentlich auch getan.

Doch trotz EnableAllowFocusChange, kann ich den Fokus der Textbox erst verlassen wenn die Validierung korrekt ist.

14.08.2015 - 15:35 Uhr

Damit habe ich schon etwas gespielt.
Wenn ich Disable einstelle, dann wird garnicht validiert wenn ich den Fokus wechsle.
Ich möchte aber beim verlassen der Textbox das kleine Ausrufezeichen sehen, aber trotzdem den Fokus wechseln können.

14.08.2015 - 15:20 Uhr

Hallo zusammen,

ich nutze erstmals einen ErrorProvider um Benutzereingaben in Textboxen zu validieren.


private void txtFIN_Validating(object sender, CancelEventArgs e)
{
    if (txt.Text == String.Empty)
    {
          errorprov.SetError(txt, "Pflichtfeld");
          txt.Focus();
          e.Cancel = true;
    }
}

Was mich stört ist das wenn eine Textbox dann als nicht valide gekennzeichnet ist, kann man den Fokus der Textbox so lange nicht wechseln bis die Eingabe valide ist.
Geht das auch anders? Ich möchte trotzdem den Fokus wechseln um weitere Eingaben zu machen und mich später um die nicht validen Felder zu kümmern.

16.07.2015 - 10:36 Uhr

Anbei ein Screenshot in dem man sieht das beim verkleinern die letzte Spalte nicht korrekt dargestellt wird. Egal wie viele Spalten das DGV hat.

16.07.2015 - 07:56 Uhr

Moin zusammen,

mich nervt ein wahrscheinlich wirklich simples Problem. Ich versuche es mal ebenfalls simpel zu erklären.

Ich habe ein DataGridView mit einer gefüllten DataSource und der Formatierung AllCells für den AutoSizeColumnsMode. Alles kein Problem, außer das mich stört das die letzte Spalte nicht immer automatisch die komplette breite füllt und somit eine Lücke bleibt.

Also mache ich:

dgv.Columns[Fields[Fields.Count - 1]].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

Hier habe ich aber das Problem das die letzte Spalte, wenn die Spalten die komplette breite füllen, nicht ganz angezeigt wird und auch die Scrollbar zu spät aktiv wird.

Ich hoffe ihr könnt mir helfen. Danke im Voraus.

28.06.2015 - 12:07 Uhr

Hallo zusammen,

ich habe mir vor einiger Zeit einen eigenen Webservice mit .NET 3.5 und Visual Studio 2010 geschrieben der bisher ausschließlich von Windows Forms Anwendungen genutzt wird.

Derzeit steige ich in die App Entwicklung für Windows Phones ein und würde gerne dort diesen Dienst nutzen. In Visual Studio 2013 Community kann ich anscheinend für Windows Phone Apps keinen Dienstverweis hinzufügen. Jedenfalls ist der Punkt (Rechtsklick auf Verweise -> Dienstverweis hinzufügen) nicht vorhanden. Kann ich diese Technologie überhaupt nutzen?

23.04.2015 - 20:37 Uhr

Absolut perfekt. Vielen Dank. 😃

Kann ich wenn ich in dem Item_Command Event bin und dort die Datenbankaktualisierung mache, eine Messagebox aufrufen die sowas beinhaltet wie "Sind sie sicher?".

Die Javascript Funktion confirm('...') kenne ich, jedoch ist da das Problem das ich ja bereits in der Codebehind bin. Hoffe sowas ist möglich das ich beim klick auf nein oder abbrechen aus der Codebehind rausspringen kann.

23.04.2015 - 16:05 Uhr

Hallo zusammen, habe ein DataGrid mit mehrere TemplateColumns.


<asp:DataGrid ID="dgrDatenbankzuordnungen" runat="server" Width="100%" AutoGenerateColumns="False"
                                    Caption="Datenbankzuordnungen" BorderWidth="1px" BorderStyle="Solid" BorderColor="#E6E6E6"
                                    PageSize="5" OnItemCommand="dgrDatenbankzuordnungen_ItemCommand">
                                    <AlternatingItemStyle BackColor="#F8F8F8" />
                                    <ItemStyle BackColor="#EEEEEE" />
                                    <Columns>
                                        <asp:TemplateColumn HeaderText="ID">
                                            <ItemTemplate>
                                                <asp:Label ID="lblID" runat="server" Text='<%# Eval("ID") %>' />
                                            </ItemTemplate>
                                        </asp:TemplateColumn>
                                        <asp:TemplateColumn HeaderText="Alias">
                                            <EditItemTemplate>
                                                <asp:TextBox ID="edAlias" runat="server" Text='<%# Eval("Alias") %>' Style="width: 100%;" />
                                            </EditItemTemplate>
                                            <ItemTemplate>
                                                <asp:Label ID="lblAlias" runat="server" Text='<%# Eval("Alias") %>' />
                                            </ItemTemplate>
                                        </asp:TemplateColumn>
                                        <asp:TemplateColumn HeaderText="ConnectionString">
                                            <EditItemTemplate>
                                                <asp:TextBox ID="edConnectionString" runat="server" Text='<%# Eval("ConnectionString") %>'
                                                    Style="width: 100%;" />
                                            </EditItemTemplate>
                                            <ItemTemplate>
                                                <asp:Label ID="lblConnectionString" runat="server" Text='<%# Eval("ConnectionString") %>' />
                                            </ItemTemplate>
                                        </asp:TemplateColumn>
                                        <asp:TemplateColumn>
                                            <ItemTemplate>
                                                <div style="white-space: nowrap;">
                                                    <asp:Button ID="btnEdit" runat="server" CommandName="Edit" Text="" class="btn24_Stift"
                                                        ToolTip="Datenbank bearbeiten, bzw. Bearbeitung abbrechen" />
                                                    <asp:Button ID="btnUpdate" runat="server" CommandName="Update" Text="" class="btn24_Haken"
                                                        ToolTip="Änderrungen übernehmen" />
                                                    <asp:Button ID="btnDeleteDBAssignment" runat="server" CommandName="Delete" Text=""
                                                        class="btn24_RedX" ToolTip="Zuordnung entfernen" OnClientClick="javascript: return confirm('Zuordnung wirklich unwiderruflich entfernen?');" />
                                                </div>
                                            </ItemTemplate>
                                        </asp:TemplateColumn>
                                    </Columns>
                                    <HeaderStyle Font-Bold="True" BackColor="White" />
                                    <PagerStyle HorizontalAlign="Center" ForeColor="Black" BackColor="#999999" Mode="NumericPages" />
                                </asp:DataGrid>

Mit den Buttons in der letzten Spalte löse ich das

dgrDatenbankzuordnungen_ItemCommand

Event aus, nur irgendwie komme ich nicht an den Text in dem DataGrid. Mit

dgrDatenbankzuordnungen.Items[e.Item.ItemIndex].Cells[index].Text

bekomme ich nur einen leeren String aus allen Zelle. Die Datasource ist ebenfalls null, obwohl ich diese gesetzt habe und auch alles korrekt dargestellt wird. Ich könnte natürlich die Source in der Session speichern, jedoch brauche ich den aktuellen Text aus der Textbox wenn ich die Felder editiere.

Ich hoffe ihr könnt mir einigermaßen Folgen und vor allem helfen.

09.12.2014 - 13:00 Uhr

Er gibt folgenden aus "Der Remoteserver hat einen Fehler zurückgegeben: (504) Gatewaytimeout.".

Ich hatte in Erinnerung das die Timeout variable schreibgeschützt ist. Geht tatsächlich.

Generell würde ich aber gerne wissen ob dieser weg ein sauberer ist um zu prüfen ob ich im internen Netzwerk bin.

09.12.2014 - 12:26 Uhr

Hallo zusammen,

ich habe habe eine Windowsanwendung mit dem ich auf einen Webservice zugreife. Damit die Anwendung weiß welche WS Url sie nutzen muss mache ich folgendes:


            try
            {
                oWS.Url = Lokale Url;
                WebRequest request = WebRequest.Create(oWS.Url);
                request.GetResponse();
                request.Abort();
            }
            catch (Exception)
            {
                try
                {
                    oWS_ScSBase.Url = DynDns Url;
                    WebRequest request = WebRequest.Create(oWS.Url);
                    request.GetResponse();
                    request.Abort();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Es konnte keine Verbindung zum Server hergestellt werden!", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }

Das klappt auch soweit, jedoch habe ich das Problem das wenn ich von außerhalb auf den WS zugreifen will, dass es bis zu 60 Sek. dauert bis er in den ersten catch Block kommt.
Wahrscheinlich wegen des Timeouts den man auch nicht verändern kann.

Sollte ich das ganze generell anders lösen?

27.11.2014 - 13:39 Uhr

Hallo zusammen,

ich bin gerade dabei mit asp eine Livesuche zu bauen.
Undzwar soll bei jedem onkeyup einer Textbox ein DataGrid aktualisiert werden.


<script language="JavaScript" type="text/javascript">
              function RefreshUpdatePanel(sControlID) {
                        __doPostBack(sControlID, '');
              };
</script>

<asp:UpdatePanel ID="upEmpfaenger" UpdateMode="Conditional" runat="server">
        <ContentTemplate>
          ...
              <asp:TextBox ID="edName" onkeyup="RefreshUpdatePanel('<%=upEmpfaenger.ClientID %>')" runat="server" Width="100px" MaxLength="50" 
                           OnTextChanged="cEmpfaengerSucheControls_ValueChanged">
              </asp:TextBox>
          ...
               <DataGrid... />
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="edName" />
        </Triggers>
</asp:UpdatePanel>

Das funktioniert soweit ganz gut. Jetzt steh ich aber noch vor folgenden Problemen:

  • Nach dem Postback verliert die TextBox ihren Focus
  • edName.Focus() setzt den Cursor leider nur auf den Anfang
  • Kann man verhindern das jedes mal die komplette Seite neu läd
12.09.2014 - 09:41 Uhr

Hallo zusammen,

ist es möglich während eines Debugging Vorgangs irgendwo (Direktfenster, Überwachung etc.) eine Abfrage einzubauen, so das das Programm automatisch an einer bestimmten Stelle stehen bleibt. Zum Beispiel in einer Schleife wenn ein Variable eine ganz bestimmten Wert hat.

14.04.2014 - 12:53 Uhr

So in etwa meinte ich das ja. Mittels meiner öffentlichen IP von daheim gehe ich über das Internet auf die Datenbank, also ohne WebService.

Um es also an der Stelle sicher zu machen brauche ich diesen so genannten Mittler. Richtig, oder habe ich es immer noch falsch interpretiert?.

14.04.2014 - 08:45 Uhr

Danke aufjedenfall dafür.

Wenn ich sämtliche Artikel richtig verstehe ist eine wirklich sichere Übertragung der Connection garnicht möglich. Es geht meist nur darum das Passwort nicht direkt im ConnectionString anzuzeigen. Übertragen wird es jedoch weiterhin unverschlüsselt.

Was ich mir eher vorstelle ist sowas wie eine SSL Verschlüsselung bei https. Dazu müsste jedoch der SQL Server diese wieder entschlüsseln können.

Gruß

14.04.2014 - 07:49 Uhr

Hallo zusammen,

ich möchte eine Verbindung zu einem SQL Server über das Internet herstellen.
Das gelingt mir auch problemlos.

Allerdings möchte ich auch das Thema Sicherheit beachten. In dem ConnectionString wird das Passwort ja in Klartext übertragen, somit auch lesbar über das Internet.

Welche Möglichkeiten habe ich hier eine möglichst hohe Sicherheit zu gewährleisten?

03.02.2014 - 15:25 Uhr

Habe meine Form nun anders aufgebaut, werde es aber bei Gelegenheit mal testen.

Danke aufjedenfall

03.02.2014 - 10:38 Uhr

Hallo zusammen,

ich habe eine CheckedListBox mit einer gesetzen DataSource.

Jetzt möchte ich in einer Schleife alle Items durchlaufen und nur bei ganz bestimmten Items die Forecolor ändern.

Ist dies möglich?

15.01.2014 - 11:22 Uhr

verwendetes Datenbanksystem: SQL Server 2012

Ich nutze einen selbst programmierten SQL Profiler welcher einwandfrei vom SQL Server 2000 bis zum SQL Server 2008 R2 sämtliche Statements mitschneidet. Beim 2012er jedoch klappt es nicht.

An folgender Stelle wirft er mir eine SqlTraceException mit folgender Ausgabe:


try
{
    trace.InitializeAsReader(connInfo, "C:\MyTDF.tdf");
}
catch {...}

Fehlermeldung:
Microsoft.SqlServer.Management.Trace.SqlTraceException: Fehler beim Initialisieren des Objekts als Leser. ---> System.Runtime.InteropServices.COMException bei ?A0xe4daab47.ProcessError(Int32 hr, UInt16* lpszMessage) bei Microsoft.SqlServer.Management.Trace.CTraceControllerBase.InitSource(Boolean bReOpen) bei Microsoft.SqlServer.Management.Trace.CTraceObjectsRowsetController.InitSource(Boolean bReOpen) bei Microsoft.SqlServer.Management.Trace.TraceServer.InitializeAsReader(ConnectionInfoBase serverConnInfo, String profileFileName) --- Ende der internen Ausnahmestapelüberwachung ---bei Microsoft.SqlServer.Management.Trace.TraceServer.InitializeAsReader(ConnectionInfoBase serverConnInfo, String profileFileName) bei SQLProfiler.Tracing.Start() in D:\SQLProfiler\Tracing.cs:Zeile 36

  • SQL Server 2012 und Management Studio 2012 sind installiert
  • Auf die aktuellen 11.0 DLLs verweise ich
21.08.2013 - 10:04 Uhr

Hallo zusammen,

ich hab die besondere Aufgabe eine Exceldatei samt Checkboxen auszulesen.
Alles kein Problem, setzt aber voraus, dass die jeweilige Checkbox einer bestimmten Zelle zugeordnet sein muss.

Jetzt kann bzw. darf das Formular jedoch nicht verändert werden und die Checkboxen sind einfach in eine bestimmte Zelle ohne Zuordnung gesetzt worden. Liest man diese Zelle nun aus bekommt man natürlichen nichts zurück.

Gibt es irgendeine Möglichkeit dieses Problem zu lösen ohne das Formular selbst zu ändern? Vieleicht sowas wie ein Control auszulesen mittels Positionsermittlung.

Vielen Dank schonmal.

10.06.2013 - 14:25 Uhr

Okay danke, werde es mal so einbauen.

10.06.2013 - 13:26 Uhr

Wenn man zur Laufzeit auf eine Spalte klickt kann man hiermit ja die kompletten Daten sortieren. Will ich aber jetzt die sortierten Daten mit z.B. einem Insert Into auffüllen und meine Methode UpdateDGV aufrufen, soll er die Sortierung des Benutzers natürlich beibehalten.

Meine Frage jetzt, wie merke mich mir diese Sortierung. Mit dem Event ColumnHeaderMouse Click kann ich mir aufjedenfalle die Spalte jedes mal in einer Variable speichern, dazu bräuchte ich dann aber auch jedes mal auch ASC oder DESC, was ich ebenfalls in einer Variable speichern könnte.

Gibt es nicht vielleicht einen viel einfacheren Weg?

16.05.2013 - 08:17 Uhr

Hallo,

Will in einer Anwendung Yourube-Videos zum laufen bringen. Per Doppelklick auf einen Video in einem DatagridView öffnet sich das Video. Das funktioniert auch tadellos.

Allerdings will ich zum einen das es automatisch anfängt abzuspielen (mit ax.Play() gehts nicht da es wohl noch nicht geladen ist) und zum anderen will ich das, dass Video an eine ganz bestimmte Stelle im Video springt.

15.05.2013 - 11:46 Uhr

Problem erkannt...

Er erstellt im debug-Verzeichnis eine Kopie der mdf. Diese muss ich einfach zu den Datenverbindungen hinzufügen und die alte löschen.

15.05.2013 - 11:25 Uhr

Hilft mir leider nicht weiter.

15.05.2013 - 11:19 Uhr

Hallo zusammen,

ich nutze erstmals die Möglichkeite direkt eine lokale Datenbank über Visual Studio einzubinden. Soweit funktioniert das ganze auch. Testdatenbank wurde erstellt und das Abfragen der Daten mit C# funktioniert auch. Führe ich jedoch das hier aus:


SqlConnection con = new SqlConnection(conString);
con.Open();

SqlCommand cmd = new SqlCommand("INSERT INTO...");
cmd.ExecuteNoneQuery();
con.Close()

Führe ich dann eine Datenabfrage aus, sind die neuen Daten auch drin. Sobald ich jedoch Visual Studio neustarte ist alles wieder beim alten so als würde alles nur schwebend geändert werden. Ich hoffe ihr versteht was genau ich meine.

19.09.2012 - 10:15 Uhr

Danke, habs gefunden. Das ToList muss außerhalb gemacht werde. Das wars schon. 😃

19.09.2012 - 09:23 Uhr

Ein Problem hab ich jetzt noch. Das Prüfen jeder Zelle, ob sie leer ist, dauert bei einer Datei von 100 Spalten und 1000 Zeilen Stunden lang.
Könnte ich an dem Code noch was verbessern?


int readyRows = 1; // Multiplikator für fertige Rows
int jumped = 0; // Für übersprungene Zellen
for (int i = 2; i <= lastRow.RowIndex; i++)
{
    DataRow dr = dtData.NewRow();
    for (int j = 0; j < columnsCount; j++)
    {
        string sReference = worksheetPart.Worksheet.Descendants<Cell>().ToList()[j].CellReference.ToString();
        string sReferenceLetters = string.Empty;
        foreach (char letter in sReference.ToCharArray())
        {
            if (Char.IsLetter(letter)) sReferenceLetters += letter;
        }

        string value;
        Cell cell = worksheetPart.Worksheet.Descendants<Cell>().ToList().ElementAtOrDefault(j + (dtData.Columns.Count * readyRows) - jumped);
        if (cell.CellReference.Value == (sReferenceLetters + i.ToString()))
            value = GetValue(cell, stringTablePart, cfs);
        else
        {
            value = "";
            jumped++;
        }
        dr[j] = value;
    }
    dtData.Rows.Add(dr);
    readyRows++; // Um die Referenz der nächsten Zeile zu bauen
}

18.09.2012 - 12:03 Uhr

Habs geschafft, danke für den Tipp, hat echt geholfen.

18.09.2012 - 10:40 Uhr

Gibt es eine Möglichkeit in einem Array der Größe 100 z.B.,
alle Zell Referenzen zu speichern die es gibt (A1 - CV1).
Damit könnte ich dann abgleichen ob eine Zelle übersprungen wurde.

17.09.2012 - 14:30 Uhr

Hallo zusammen, ich habe eine großes Problem beim Import einer xlsx Datei mit dem OpenXML SDK. Ist eine Tabelle komplett gefüllt, funktioniert alles tadellos. Sieht eine Tabelle jedoch z.B. so aus:

Spalte1 Spalte2 Spalte3
Wert1 Wert2 Wert3
Wert1 Wert3

...importiert es das ganze so in eine DataTable:

Spalte1 Spalte2 Spalte3
Wert1 Wert2 Wert3
Wert1 Wert3

Er überspringt quasi die leeren Zellen und schiebt alles eins nach links in dem Fall.
Hier mein Code dazu.


for (int i = 2; i <= lastRow.RowIndex; i++)
{
    DataRow dr = dtData.NewRow();

    Row row = new Row();
    // An dieser Stelle jetzt wird mit row.Childelements.Count eine Zelle weniger ausgegeben
    row = worksheetPart.Worksheet.Descendants<Row>().Where(r => i == r.RowIndex).FirstOrDefault();

    int j = 0;

    if (row != null)
    {
        foreach (Cell c in row.ChildElements)
        {
            //Get cell value
            string value = cell.ElementAt(0).InnerText;

            dr[j] = value;
            j++;

            if (j == dtData.Columns.Count)
                break;
        }
    }
}

05.09.2012 - 14:27 Uhr

Mit folgendem Code lese ich eine Zelle aus:


public static string GetValue(Cell cell, SharedStringTablePart stringTablePart)
{
            if (cell.ChildElements.Count == 0) return null;

            //get cell value
            string value = cell.ElementAt(0).InnerText;

            //Look up real value from shared string table
            if ((cell.DataType != null) && (cell.DataType == CellValues.SharedString))
            value=
stringTablePart.SharedStringTable.ChildElements[Int32.Parse(value)].InnerText;

            return value;
}

Ich bräuchte unbedingt noch das Format der Zelle, am besten die Format ID.
Mit 'cell.Datatype' bekomme ich teilweise nur null ausgegeben, beim Datum und einer Währung z.B.

Könnt ihr mir helfen?

05.09.2012 - 09:06 Uhr

Passt, habe über die style.xml herausgefunden welche FormatID ich brauche.

04.09.2012 - 15:30 Uhr

Hallo zusammen,

meine Aufgabe ist es aus einer Datatable eine xlsx zu machen.
Das gelingt mir auch, jedoch hab ich enorme Proble Zellen korrekt zu formatieren.
Hätte jemand ein Beispielprojekt wo vllt eine Spalte als Eurowährung, eine als Datum mit Uhrzeit und eine als Prozentsatz formatiert ist?

25.10.2011 - 11:55 Uhr

Ich benutze die Klasse HSSFWorkbook um eine Excel Datei zu lesen.

Das Problem ist aber das bei alten Excel Dateien diese Fehlermeldung kommt (An dieser Stelle: HSSFWorkbook wb = new HSSFWorkbook(fs))

The supplied spreadsheet seems to be Excel 5.0/7.0 (BIFF5) format.
POI only supports BIFF8 format.

fs steht für ein Fiilestream welches ich an die Klasse HSSF übergebe.
Gibt es eine Möglichkeit das ganze mit alten Excel Dateien und dieser Klasse kompatibel zu machen?

P.S. Ich nutze diese Klasse da Excel auf den verwendeten Rechnern nicht installiert ist.

04.10.2011 - 12:19 Uhr

Hab das Problem mit folgendem Code gelöst.


// xls Datei öffnen
FileStream fs = new FileStream(xlsFiles[i], FileMode.Open);
HSSFWorkbook wb = new HSSFWorkbook(fs);
// Tabellenblatt umbenennen
wb.SetSheetName(0, "DATEN");
fs.Close();

// Alte xls überschreiben
fs = new FileStream(xlsFiles[i], FileMode.Create);
wb.Write(fs);
fs.Close();

04.10.2011 - 08:09 Uhr

Ich habe gesucht und gesucht, doch leider noch keine Lösung gefunden wie ich ein Tabellenblattname ändere. Ich muss dazu sagen das ich noch nicht lange selbst programmiere.

Ich hoffe ihr helft mir etwas bei der suche.

29.09.2011 - 11:17 Uhr

Wie schon im Titel erwähnt möchte ich über ein Tool, welches ich geschrieben habe, ein Excel Tabellenblatt umbenennen.

Das funktioniert auch mit folgendem Code:


                Application excel = new Application();
                Workbook wb = null;                

                for (int i = 0; i < xlsFiles.Length; i++)
                {
                    // Datei öffnen
                    wb = excel.Workbooks.Open(xlsFiles[i], m, m, m, m, m, m, m, m, m,         
                    m, m, m, m, m);

                    // Erstes Arbeitsblatt auswählen
                    Worksheet ws = (Worksheet)wb.Worksheets[1]; 

                    // Arbeitsblatt umbenennen
                    ws.Name = "DATEN";

                    wb.Application.DisplayAlerts = false;

                    // Datei unter gleichem Namen speichern
                    wb.SaveAs(xlsFiles[i], XlFileFormat.xlWorkbookNormal, null, null, 
                    null, null, XlSaveAsAccessMode.xlNoChange, null, null, null, null, 
                    null);

                    wb.Application.DisplayAlerts = true; // wieder einschalten
                    

                    // Datei und Anwendung schließen bzw. beenden
                    wb.Close();
                    excel.Quit();

Mein Problem liegt jetzt darin das auf dem Rechner, auf dem das Programm laufen soll, unbedingt Excel installiert sein muss.

Gibt es einen Weg das Problem anders zu lösen?