Warum sagst du uns denn nicht wie du es gelöst hast? Kennst du das auch, du suchst im Internet nach einer Problemlösung und du findest auch ein paar Ansätze in Foren und zum Schluss steht da nur "habs anders gelöst, danke".
Um das zu vermeiden, würde ich einfach schreiben WIE du es nun gelöst hast.
Hmm bei mir funktionierts unter Linux aber:
cat main.cs
using System;
public class MainC {
public static void Main() {
Console.WriteLine("test");
Console.ReadLine();
}
}
mono --version
Mono JIT compiler version 1.2.3.1, (C) 2002-2006 Novell, Inc and Contributors. [URL]www.mono-project.com[/URL]
TLS: __thread
GC: Included Boehm (with typed GC)
SIGSEGV: normal
Architecture: x86
Disabled: none
Hi Leute,
hab was intressantes rausgefunden. Und zwar, Variante 1 ist schon richtig, allerdings wird das ganze im Excel nur falsch dargestellt. Sobald man zB auf die Zelle A2 klickt, und dann ins fx (wie heißt das?!) klickt, und wieder wegklickt auf eine andere Zelle, dann wird das ganze richtig dargestellt. Also vorher steht zB 0 drinnen, oder 2.6133, nach dieser Prozedur dann eben 0,00 oder 2.61.
Aber das kann doch nicht die Lösung sein? Außerdem noch etwas, bei der Datum-Spalte, wenn nache einem Datum ein Leeres Feld kommt, geht die Formatierung für die nächsten Zellen drauf....
Ist das jetzt ein Excel Bug oder liegt es an mir? Die Lösung für das 1 Problem wäre wahrscheinlich (dummy lösung) alle Zellen zu selektieren und wieder zu deselektieren. Aber das kanns doch auch nicht sein?
Hier die Links zu den Screenshots:
Draufklicken -> http://anarxo.homelinux.org/Variante_1_bla.JPG
Und wieder wegklicke tadaa -> http://anarxo.homelinux.org/Variante_1_bla2.JPG
Hier noch meine Insert Prozedur in das Excel Sheet
// write data
foreach (int merkmalNr in m_Messwerte.Keys) {
cmd.CommandText = "INSERT INTO [Merkmal " + merkmalNr.ToString() + "$] " +
"(Wert, Stichprobenumfang, Anzahl_Fehler, Attribut, " +
"Datum, Ereignisse, Chargennummer, Nestnummer, " +
"Prüfernummer, Maschinennummer, Prozeßparameter, " +
"Prüfmittelnummer) " +
"VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
foreach (Messwert m in m_Messwerte[merkmalNr]) {
//fill parameters
cmd.Parameters.Add("Wert", OleDbType.Double).Value = m.Wert;
cmd.Parameters.Add("Stichprobenumfang", OleDbType.Integer).Value = m.Stichprobenumfang;
cmd.Parameters.Add("Anzahl_Fehler", OleDbType.Integer).Value = m.AnzahlFehler;
cmd.Parameters.Add("Attribut", OleDbType.SmallInt).Value = m.Attribut;
if (m.Datum_Zeit != null) {
cmd.Parameters.Add("Datum", OleDbType.Date).Value = m.Datum_Zeit;
} else {
cmd.Parameters.Add("Datum", OleDbType.Date).Value = DBNull.Value;
}
cmd.Parameters.Add("Ereignisse", OleDbType.Integer).Value = m.Ereignisse;
cmd.Parameters.Add("Chargennummer", OleDbType.VarChar).Value = Convert.ToString(m.Chargennummer) + "";
cmd.Parameters.Add("Nestnummer", OleDbType.VarChar).Value = Convert.ToString(m.Nestnummer) + "";
cmd.Parameters.Add("Prüfernummer", OleDbType.VarChar).Value = Convert.ToString(m.Prüfernummer) + "";
cmd.Parameters.Add("Maschinennummer", OleDbType.VarChar).Value = Convert.ToString(m.Maschinennummer) + "";
cmd.Parameters.Add("Prozeßparameter", OleDbType.VarChar).Value = Convert.ToString(m.Prozeßparameter) + "";
cmd.Parameters.Add("Prüfmittelnummer", OleDbType.VarChar).Value = Convert.ToString(m.Prüfmittelnummer) + "";
//execute query
cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
}
}
Vielleicht weiß ja jemand hier wo das Problem liegt...
lg
Bakunin
Hi Leute,
genau der Thread den ich suchte 🙂. Allerdings komme ich einfach nicht dahinter, wieso meine Spalten nicht formatiert werden.
Ich erstelle ein Excel file, nach Rainbirds Beispiel [1], danke an dieser Stelle an Rainbird 🙂. Das ganze klappt wunderbar. Nur jetzt sollte ich eben die Spalten noch formatieren. Da ergab sich bei mir die erste Frage, wie selektiere ich eine ganze Spalte?
Irgendwo habe ich dann das im Forum gefunden:
Excel.Range oRange = (Excel.Range)ws.Columns[SpaltenNummer, Type.Missing];
Da ich das ganze per Reflection mache, sieht dazu mein Code so aus:
range = sheet.GetType().InvokeMember("Columns", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { i, Type.Missing });
So, um nun die Spalte zu formatieren verwende ich folgendes:
range.GetType().InvokeMember("NumberFormat", BindingFlags.SetProperty | BindingFlags.OptionalParamBinding, null, range, format);
In format steht zB "0,00", "0", "TT.MM.JJJJ HH:mm:ss".
Tja das wars, leider funktioniert es nur nicht...
Ich hab dann mal was anderes versucht:
range = sheet.GetType().InvokeMember("Cells", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { 2, i });
object entirecolumn = range.GetType().InvokeMember("EntireColumn", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, range, new object[0]);
entirecolumn.GetType().InvokeMember("NumberFormat", BindingFlags.SetProperty | BindingFlags.OptionalParamBinding, null, entirecolumn, format);
Und siehe da, es wird was formatiert. Die Dezimalzahlen werden mit 2 Kommastellen angezeigt, die Zahlen überhaupt als Zahl gespeichert und nicht als Text. Nur ein Manko gibt es noch, und zwar das Datum. Das Datum wird in der ersten Zeile richtig formatiert, in den nächsten Zeilen wird die Zeit abgeschnitten, es wird einfach als Datum formatiert, aber nicht in dem Stil wie ich will ("TT.MM.JJJJ HH:mm:ss").
Jetzt stellt sich die Frage, warum funktioniert das überhaupt, wenn ich anstatt
range = sheet.GetType().InvokeMember("Columns", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { i, Type.Missing });
das hier mache:
range = sheet.GetType().InvokeMember("Cells", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { 2, i });
Das ergibt für mich gar keinen Sinn. Wenn ich mir die Formatierung von Zellen anschaue die leer sind - stimmt sie auch nicht mit der Formatierung die ich bestimmt habe überein, sondern es ist einfach das "Standard" format.
Anbei noch zwei Screenshots zur Variante 1 [2] und 2 [3]. Außerdem hier nochmals der ganze Code:
foreach (DataColumn column in table.Columns) {
i++;
// Insert fieldname
object range = sheet.GetType().InvokeMember("Cells", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { 1, i });
range.GetType().InvokeMember("Value", BindingFlags.SetProperty | BindingFlags.OptionalParamBinding, null, range, new object[1] { column.ColumnName });
object[] format = null;
if(column.DataType.Equals(typeof(double))){
string s = "0" +
System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator;
for (int digits = 0; digits < System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalDigits; digits++) {
s += "0";
}
format = new object[] { s.ToString() };
}else if(column.DataType.Equals(typeof(int))){
format = new object[] { "0" };
}else if(column.DataType.Equals(typeof(Int16))){
format = new object[] { "0" };
}else if(column.DataType.Equals(typeof(DateTime))){
format = new object[] { "TT.MM.JJJJ HH:mm:ss" };
}else if(column.DataType.Equals(typeof(string))){
format = new object[] { "" };
}
//Excel.Range oRange = (Excel.Range)ws.Columns[SpaltenNummer, Type.Missing];
range = sheet.GetType().InvokeMember("Columns", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { i, Type.Missing });
//range = sheet.GetType().InvokeMember("Cells", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { 2, i });
//range.GetType().InvokeMember("EntireColumn", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, range, new object[0]).GetType().InvokeMember("NumberFormat", BindingFlags.SetProperty | BindingFlags.OptionalParamBinding, null, range, format);
range.GetType().InvokeMember("NumberFormat", BindingFlags.SetProperty | BindingFlags.OptionalParamBinding, null, range, format);
}
lg
Bakunin
[1] http://www.mycsharp.de/wbb2/attachment.php?attachmentid=1541
[2] http://anarxo.homelinux.org/Variante_1.JPG
[3] http://anarxo.homelinux.org/Variante_2.JPG
Hallo Cord Worthmann,
danke für die Antwort. Ich habe eine CodeBehind Datei erstellt, alles funktioniert soweit auch wunderbar. Allerdings kann ich aus der CodeBehind Datei auch nicht auf das "user" Objekt zugreifen.
Kannst du mir vl genauer erklären was du meinst?
Hier die Global.asax
<%@Application Language="C#" Inherits="Global" %>
<%@Assembly name="core" %>
<object id="user"
runat="server"
scope="session"
class="Test.User.User"
/>
Die zugehörigen Global.asax.cs:
public class Global : HttpApplication
{
void Application_Start(object sender, EventArgs e) {
// Code that runs on application startup
}
void Application_End(object sender, EventArgs e) {
// Code that runs on application shutdown
}
void Application_Error(object sender, EventArgs e) {
// Code that runs when an unhandled error occurs
//todo log4net
}
void Session_Start(object sender, EventArgs e) {
// Code that runs when a new session is started
}
void Session_End(object sender, EventArgs e) {
// Code that runs when a session ends.
// Note: The Session_End event is raised only when the sessionstate mode
// is set to InProc in the Web.config file. If session mode is set to StateServer
// or SQLServer, the event is not raised.
}
}
Also wie gesagt ich würde gerne ganz einfach auf das "user" Objekt - welches in der Global.asax definiert ist - hier auch zugreifen können (und auch in allen anderen CodeBehind files).
also zB in der Login.aspx.cs:
protected void Login_Authenticate(object sender, AuthenticateEventArgs e) {
try {
Test.User.User newUser = Test.User.User.Login(Login.UserName, Login.Password);
//hier will ich jetzt auf das Session Scope Objekt "user" zugreifen
user = newUser;
Response.Redirect(@"./Index.aspx");
} catch (Test.User.Exceptions.LoginFailedException LoginFailedException) {
}
}
lg
Bakunin
Hallo Leute,
ich habe mir gerade dieses Tuto angeschaut:
http://www.galileocomputing.de/openbook/asp/asp110002.htm#Rxxasp11607InstanzeneigenerKlassenindenSitzungsdatenspeichern
Es geht darum, ein Objekt global Zugreifbar zu machen (auf allen ASP.NET Seiten).
So hier mal meine global.asax:
<%@ Application Language="C#" %>
<object id="user"
runat="server"
scope="session"
class="Test.User.User"
/>
So, jetzt will ich von einer aspx Seite darauf zugreifen. Funktioniert wunderbar.
Aber wenn ich aus der Code Behind Klasse darauf zugreifen will, scheint das Objekt nicht in der Intellisense auf - und der Zugriff funktioniert auch nicht.
Muss mensch etwas bestimmtes beachten wenn mensch solche Scope Objekte in Code Behind Klassen verwenden will?
Hab leider nichts gefunden.
lg
Bakunin
Danke an euch beide, werde mir heute das ganze genauer ansehen. Werd mal die MSDN zu den genannten Methoden mal durchstöbern.
lg
Bakunin
Hallo Ifoko,
gibt es einen Designer für die Webcontrolentwicklung? Also ich möchte im Control selber <div> Controls verwenden.
Also nochmal, falls ich mich unklar ausgedrückt habe. Ich möchte ein Webcontrol entwickeln. In diesem Webcontrol werden 3 Textboxen und 3 Labels verwendet. In der CreateChildControls Methode mache ich es bis jetzt so, dass ich ein Tabel Control erstelle. Diese Table hat 2 Spalten, links liegt immer ein Label, rechts eine Textbox. Da ich meine aber, dass Table nicht für das Layout verwendet werden soll, würde ich es eben gerne anders lösen.
Und darum hätte ich gerne ein paar Links mit Anleitung zur Webcontrolentwicklung. Also was ist der beste Weg etc. Die Sites die ich bis jetzt gefunden habe, verwenden auch alle Tables um die ChildControls in ihrem eigenen Control wie gewünscht anzuordnen.
Bleibt die Frage, ob das so ok ist, oder eben nicht? (Wie gesagt Table sollte doch normalerweise nicht fürs "layouten" verwendet werden?)
lg
Bakunin
Also ich hab mal weiter gesucht im Netz aber ich finde nichts brauchbares. Komisch eigntlich, hab gedacht zum Thema Webcontrol developing gibt es gute HowTos... naja bei denen Sites die etwas mit dem Thema zu tun hatten bin ich immer wieder auf Tables gestoßen.
Gibt es wirklich keine andere Möglichkeit die ChildControls im Control selber anzuordnen?
lg
Bakunin
Hallo Leute, ich hab bis jetzt nichts zu diesem Thema im Forum gefunden, bzw nicht das richtige.
Mein Problem besteht darin, dass ich ein eigenes Webcontrol entwickeln will, dass es ermöglicht einen Text mit Zusammenfassung und Titel zu speichern (also 3 Textboxen).
Jetzt möchte ich das die Labels (Beschreibung der Textboxen [Titel, Zusammenfassung, etc]) und die Textboxen in einer tabellarischen Form angezeigt werden.
Also:
Titel:..........................[Textbox]
Zusammenfassung:.....[Textbox]
Inhalt:........................[Textbox]
Ich könnte jetzt die Render Methode überschreiben und alles in eine Tabelle packen (Table Control). Aber ich würde das gerne mit DIVs lösen - die Diskussion warum DIVs anstatt Table möchte ich hier aber nicht aufleben lassen 🙂 - weiß aber nicht wirklich wie ich das machen soll. Gibt es generell eine gute Anleitung für die Webcontrolentwicklung? Gerade bezogen auf den Aufbau des Controls.
Zur Zeit weiß ich nicht wirklich wie ich das "schön" lösen könnte. Für ein paar gute Links wäre ich dankbar - aber natürlich auch für ein paar Vorschläge 🙂.
Vielen Dank im Voraus
lg
Bakunin
PS: Wenn es möglich ist, möchte ich nicht umbedingt einen HTML Code in die Render Methode übernehmen (Außer das wäre Standard).