Laden...

Forenbeiträge von Shizora Ingesamt 36 Beiträge

25.03.2012 - 23:14 Uhr

Win 7 neu aufgesetzt. Nun läufts 😉

09.03.2012 - 21:54 Uhr

Ich hoffe ihr könnt mir weiter helfen!

Wenn ich ein neues Projekt erstellen will wird mit bei den Templates nur " No items found" angezeigt ...

21.09.2011 - 11:34 Uhr

Oh, habe vergessen, dass die Daten nicht auf der Website angezeigt werden, sondern als Exceldatei zum Download angeboten werden.

21.09.2011 - 11:10 Uhr

Hallo und danke für die Tipps.

Die Seite ist nicht für die Masse gedacht sondern nur Intern. Ich übergebe meiner SQL-Abfrage Methode später noch ein Zeitfenster (von, bis), welches mit dann nur die Ergebnisse in diesem Zeitraum gibt. Nur sollte es im extremfall, wenn man wirklich alle Daten rausholt auch funktionieren.

21.09.2011 - 10:47 Uhr

Hallo ich habe das Problem soeben gelöt! 😁

Ich habe an einen Scriptmanager auf der Masterseite. Auerdem benutze ich einen UpdateProgress Control.
Im Scriptmanager habe ich dann einfach AsyncPostBackTimeout auf 600 Sekunden gestellt und siehe da, es funzt.

Ich vermute mal dass die Seite dadurch "am Leben gehalten wird", also die Komunikation zwischen Server und Browser bestehen bleibt.

21.09.2011 - 10:19 Uhr

Hallo, ich habe ein nerviges Problem.

Ich habe eine Methode die viele viele Datennsätze aus einer DB holt und diese als Datatable zurück gibt. Das kann schon mal bis zu fünf Minuten dauern. Die Datatable wird in eine Session gespeichert, so weit so gut.

Jetzt mache ich einen Response.Redirect("Foo.aspx"). im Pageload wird die Session wieder in eine Variable gespeichert.

Leider habe ich das Problem, dass der Redirect gar nicht funktioniert. Ich habe einen Haltepunkt im Pageload der Foo.aspx gesetzt und er springt dort gar nicht rein... Limitiere ich die DB abfrage auf - sagen wir mal 10 - (limit 10) funktioniert es, also vermute ich mal, dass es mit der langen Zeit zu tun hat (Timeout).

Ich bin für jeden Tipp dankbar.

27.07.2011 - 15:50 Uhr
  
IEnumerable<T> tmpQuery = null;  
  

so habe ich mir das auch vorgestellt. Mit dem Ausdruck T sage ich doch dass es sich um eine generische Klasse handelt oder? Das funktioniert bei mir leider nicht (Namespace name T could not be found). Er erwartet wohl einen genauen Typ. Habe ich was vergessen?

27.07.2011 - 12:24 Uhr

verwendetes Datenbanksystem: DataTable - linq

Hallo,

ich habe eine Methode und möchte je nach Bedingung eine where clause hinzufügen. Es gibt eigentlich nur drei bedingungen. Bei Bedingung A brauche ich die where nicht. Nur bei B und C soll sie parametisiert hinzugefügt werden.

Noch ein Code snipplet wie es bis jetzt aussieht (Ich habe den code anonymisiert also nicht wundern 🙂 ):


var result = from c in datatable.AsEnumerable()  
                                   // diese where muss nur rein wenn Bedingung B oder C zutrifft
                                     where c.Field<string>("blub") == parameter
                                     group c by new
                                     {
                                         varA= c.Field<string>("blab"),
                                     } into g
                                     where g.Count() > 0
                                     select new
                                     {
                                         varID = g.Key.ID, 
                                     };  

07.07.2011 - 12:56 Uhr

Hallo,

ich habe ein ganz blödes Problem. Zur Situation:
Der User stellt einen Filter ein, der im Nachhinein eine Exceldatei erstellt und diese in eine Zip Datei Packt. Diese wird dem User dann zum Download angeboten. Während des Erstellens der Dateien läuft ein Updateprogress, damit der User bescheid weiss, dass der Server am rattern ist.

Das ganze habe ich so gelöst:
Abfrage Button ist mit Updatepanel verbunden. Wenn Updatepannel arbeitet greift der UpdateProgressDer Vorgang wird in einer neuen Seite gemacht.

Response.Redirect("ExcelFoo.aspx");

(Die Objekte speichere ich in Session bzw Viewstates)

Im Pageload der ExcelFoo.aspx wird nur der Pageload benutzt:

ZipFile zip = new ZipFile();
            zip.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;

            foreach (ListItem item in lbOutputGespeicherte.Items)
            {
                switch (item.ToString())
                {
                    case "bla":
                        zip.AddEntry(TimeRange + StatType.bla.ToString() + ".xlsx", (ExcelExport.CreateExcelSheet(StatType.bla, f, new object[] { excelData }).GetAsByteArray()));
                        break;
                    case "blub":
                        zip.AddEntry(TimeRange + StatType.blub.ToString() + ".xlsx", (ExcelExport.CreateExcelSheet(StatType.blub, f, new object[] { excelData }).GetAsByteArray()));
                        break;
                }
            }
 SendFile(zip, "Stats_" + TimeRange.Substring(0, TimeRange.Length - 1));
private static void SendFile(ZipFile ZipData, string FileName)
        {
            HttpContext.Current.Response.Clear();
            HttpContext.Current.Response.BufferOutput = false;  // for large files
            HttpContext.Current.Response.ContentType = "application/zip";
            HttpContext.Current.Response.AddHeader("content-disposition", "filename=" + FileName + ".zip");
            ZipData.Save(HttpContext.Current.Response.OutputStream);
            HttpContext.Current.Response.End(); 
        }

Die Seite ist nach dem Download also immer noch gesperrt vom UpdateProgress (soll ja bei einem Prozessablauf auch so sein). Die einzige Möglichkeit um dies zu umgehen ist F5.

16.06.2011 - 15:10 Uhr

Holla da hast du dir aber Mühe gegeben! Vielen Dank. Ich werde das morgen auf der Arbeit mal ausprobieren 😃

14.06.2011 - 12:16 Uhr

Hallo,

Ich habe eine Methode geschrieben die mir eine Datatable zurück liefert. Das Gridview wird mit dieser als Datasource gebindet. Da ich eine Customdatasource benutze musste ich ja die Sorting Methode selber schreiben. Jetzt habe ich das Problem dass die Letzte Reihe mir die Summe von allen anderen Reihen anzeigt, weshalb sie auch immer unten stehen bleiben soll. Naja aber wenn ich nach einer bestimmten Spalte sortieren will wird die letzte Reihe mit sortiert und genau das will ich vermeiden 😃


protected void gvLostCalls_Sorting(object sender, GridViewSortEventArgs e)
        {
            ViewState["sortexp"] = e.SortExpression;
            ViewState["sortdir"] = e.SortDirection;            
            DataView dv = grid_sort();            
            gvLostCalls.DataSource = dv;
            gvLostCalls.DataBind();            
        }

        private DataView grid_sort()
        {
            DateTime[] d = guiFunction.GetTimeRage(rblTimeSpan.SelectedValue, null, null);
            DataTable griddata = guiFill.LostCalls(d[0], d[1]);  
          
            DataView dv = new DataView(griddata);
            
            string sort;
            if (ViewState["sortdir"].ToString() == "Ascending")
            {
                sort = "ASC";
            }
            else
            {
                sort = "DESC";
            }
            dv.Sort = ViewState["sortexp"].ToString() + " " + sort;                   
            return dv;
        }  

21.01.2011 - 14:33 Uhr

Vielen Dank ihr hattet recht. Hatte in meiner CSS Klasse

fieldset
{
margin: 1em 0px;
padding: 1em;
border: 1px solid #ccc;
height: 134px;
}

stehen 😛

20.01.2011 - 10:15 Uhr

verwendete Web-Technologie: ASP.NET (VS2010)

Hallo,

ich habe ein blödes Problem: Ich habe einen Grid in einem Panel mit Grouping Text. Immer wenn ich im Grid einen neuen Eintrag mache (Datenbank angebunden) änders sich die größe meines Panels aber nicht.

Hier noch der Code:


<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true"
    CodeBehind="gruppen.aspx.cs" Inherits="OTRS_Monitor.gruppen" %>

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <div>
        <asp:Panel ID="pGruppeAnlegen" runat="server" GroupingText="Gruppe anlegen">
            <asp:Button ID="bNeu" runat="server" Text="Neu" OnClick="bNeu_Click" />
            <asp:ModalPopupExtender ID="bNeu_ModalPopupExtender" runat="server" PopupControlID="pGruppeNeu"
                TargetControlID="bNeu" BackgroundCssClass="modalBackground" 
                CancelControlID="bGruppeAbbrechen">
            </asp:ModalPopupExtender>
            <br />
            <br />
            <asp:UpdatePanel ID="upGruppeAnlegen" runat="server">
                <ContentTemplate>
                    <asp:GridView ID="gvGruppe" runat="server" AutoGenerateColumns="False" 
                        DataKeyNames="gruppe_id" DataSourceID="dsGruppe" CssClass="mGrid">
                        <Columns>
                            <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" 
                                ShowSelectButton="True" ButtonType="Image" 
                                DeleteImageUrl="~/Styles/Images/delete.png" 
                                EditImageUrl="~/Styles/Images/edit.png" 
                                SelectImageUrl="~/Styles/Images/new.png" />
                            <asp:BoundField DataField="name" HeaderText="Name" SortExpression="name" />
                            <asp:BoundField DataField="gruppe_id" HeaderText="gruppe_id" 
                                InsertVisible="False" ReadOnly="True" SortExpression="gruppe_id" 
                                Visible="False" />
                        </Columns>
                    </asp:GridView>
                </ContentTemplate>
                <Triggers>
                    <asp:AsyncPostBackTrigger ControlID="bGruppeOk" EventName="Click" />
                </Triggers>
            </asp:UpdatePanel>
            <asp:SqlDataSource ID="dsGruppe" runat="server" 
                ConnectionString="<%$ ConnectionStrings:OTRS_Monitor.Properties.Settings.Setting %>" 
                DeleteCommand="DELETE FROM [gruppe] WHERE [gruppe_id] = @gruppe_id" 
                InsertCommand="INSERT INTO [gruppe] ([name]) VALUES (@name)" 
                SelectCommand="SELECT [name], [gruppe_id] FROM [gruppe]" 
                
                
                UpdateCommand="UPDATE [gruppe] SET [name] = @name WHERE [gruppe_id] = @gruppe_id" 
                ProviderName="<%$ ConnectionStrings:OTRS_Monitor.Properties.Settings.Setting.ProviderName %>">
                <DeleteParameters>
                    <asp:Parameter Name="gruppe_id" Type="Int32" />
                </DeleteParameters>
                <InsertParameters>
                    <asp:Parameter Name="name" Type="String" />
                </InsertParameters>
                <UpdateParameters>
                    <asp:Parameter Name="name" Type="String" />
                    <asp:Parameter Name="gruppe_id" Type="Int32" />
                </UpdateParameters>
            </asp:SqlDataSource>
        </asp:Panel>
        <asp:Panel ID="pGruppeNeu" runat="server" Style="display: none" CssClass="modalPopup">
            <table style="width: 100%;">
                <tr>
                    <td>
                        <asp:Label ID="lGruppeName" runat="server" Text="Name:"></asp:Label>
                    </td>
                    <td>
                        <asp:TextBox ID="tbGruppeName" runat="server"></asp:TextBox>
                    </td>
                </tr>
            </table>
            <asp:Button ID="bGruppeOk" runat="server" Text="Übernehmen" 
                onclick="bGruppeOk_Click" />
            <asp:Button ID="bGruppeAbbrechen" runat="server" Text="Abbrechen" />
        </asp:Panel>
    </div>
</asp:Content>

20.07.2010 - 16:26 Uhr

Sorry, ich bin da noch nicht so fit

Aber vielen Dank, es klappt jetzt! 👍

20.07.2010 - 14:57 Uhr

Hab es so versucht, allerdings wird mir dann als type null wiedergegeben.


string typ = "System.Web.UI.WebControls." + row["Typ"];   //"System.Web.UI.WebControls.RadioButtonList"
Type type = Type.GetType(typ); //null

20.07.2010 - 12:32 Uhr

Hallo,

Ich möchte die Werte aus meiner Datenbank (TextBox, RadioButtonList etc.) als Typ benutzen. Wie muss ich da vorgehen?


            DataTable tbl = ds.Tables["feld"];
            foreach (DataRow row in tbl.Rows)
            {
                //if ((String)row["Typ"] == "RadioButtonList")
                //{
                //    Label label = new Label();
                //    label.Text = (String)row["Name"];
                //    RadioButtonList radiobuttonlist = new RadioButtonList();
                //    radiobuttonlist.Items.Add("Herr");

                //    Panel1.Controls.Add(radiobuttonlist);
                //}
                //if ((String)row["Typ"] == "TextBox")
                //{
                //    Label label = new Label();
                //    label.Text = (String)row["Name"];
                //    TextBox textbox = new TextBox();
                //    Panel1.Controls.Add(textbox);
                //}       
                
                row["Typ"] <- Soll also Typ da stehen z.B.: TextBox textbox = new TextBox();
             }

01.07.2010 - 11:06 Uhr

So um es zu beenden:


foreach (GridViewRow row in GridView2.Rows)
                {
                    CheckBox cb = (CheckBox)row.Cells[1].Controls[0];
                    cb.Enabled = true;
                }

😃

23.06.2010 - 10:17 Uhr

Heißt das ich erstelle ein TemplateField und packe da meine Checkboxen rein, damit ich in den "writemodus" wechseln kann?

23.06.2010 - 09:39 Uhr

Hallo,

ich habe mein Gridview Programmatisch erstellt und. Er wird über eine Mysql Datenbank gefüllt.


conn = new MySqlConnection("SERVER=localhost;DATABASE=formular;USER ID=;PWD=;PORT=;");
            conn.Open();
            queryCB = "SELECT feld.Name, formularfelder.Pflichtfeld FROM formularfelder INNER JOIN feld ON formularfelder.Feld_FK = feld.Feld_ID " + "WHERE Formular_FK = " + FormularID;
            cmd = new MySqlCommand(queryCB, conn);
            da = new MySqlDataAdapter(cmd);
            ds = new DataSet();
            
                da.Fill(ds);
                this.GridView2.DataSource = ds;
                this.GridView2.DataBind();
                FormGenUpdate_ModalPopupExtender.Show();

Es geht um die Spalte Pflichtfelder, welche mir die Werte 1 und 0 gibt. In meinem Gridview enstehen automatisch (warum auch immer) Checkboxen. Ist ja auch super so, aber die Checkboxen sind nicht aktiv, ich kann sie also nicht ändern und genau das ist mein Problem.

18.06.2010 - 09:00 Uhr

Moin,

Ich hab den Gridview jetzt einfach programmatisch erstellt/gefüllt. So komm ich natürlich auch an meine Variable FormularID ran.


protected void ZeigeFormGenUpdatePopup(object sender, EventArgs e)
        {
            KlickFinder(sender);
            lProjekt0.Text = gwKundenliste.SelectedRow.Cells[3].Text;
            string FormularID = gwKundenliste.SelectedRow.Cells[9].Text;            

            string query;
            MySqlCommand cmd;
            MySqlConnection conn;
            MySqlDataAdapter da;
            DataSet ds;

            conn = new MySqlConnection("SERVER=localhost;DATABASE=formular;USER ID=;PWD=;PORT=;");
            conn.Open();
            query = "SELECT feld.Name, formularfelder.Pflichtfeld FROM formularfelder INNER JOIN feld ON formularfelder.Feld_FK = feld.Feld_ID " + "WHERE Formular_FK = " + FormularID;
            cmd = new MySqlCommand(query, conn);
            da = new MySqlDataAdapter(cmd);
            ds = new DataSet();
            try
            {
                da.Fill(ds);
                this.GridView2.DataSource = ds;
                this.GridView2.DataBind();
                conn.Close();
                FormGenUpdate_ModalPopupExtender.Show();
            }
            catch
            {
                Response.Write("Es exestiert noch kein Formular für diesen Kunden");
            }
        }

16.06.2010 - 12:19 Uhr

Danke, leider bin ich noch nicht wirklich weiter gekommen 😦
Mein Problem ist, dass ich nicht weiss wie ich auf eine Variable im Codebehind zugrifen kann um diese dann im Query Builder als WHERE Bedingung zu benutzen.

Meine Variable ist


string FormularID = gwKundenliste.SelectedRow.Cells[8].Text.ToString();

09.06.2010 - 12:38 Uhr

Danke für den Hinweis, ich werde mir das wohl mal genauer anschauen müssen 😃
Aber wie komme ich mit meinem Problem jetzt weiter?

09.06.2010 - 11:32 Uhr

Hallo,

ich habe einen Gridview mit mehreren Zeilen. in jeder Zeile wird ein Formular gelistet. Klicke ich nun das jeweilige Formular an öffnet es sich und ich kann es bearbeiten.

Die Formular_ID aus der Datanbank wird aus dem Gridview übergeben und als Variable gespeichert.
Und so sieht mein Updatebutton bis jetzt aus:


protected void FormularUpdate(object sender, EventArgs e)
        {            
            string FormularID = gwKundenliste.SelectedRow.Cells[8].Text.ToString();            
            Befehl.Connection = Verbindung;
            Befehl.CommandText = "UPDATE formular SET Beschreibung =" + tbBeschreibungUD.Text.ToString() + ",Name=" + tbNameUD.Text.ToString() + ",Infofeld =" + tbInfofeldUD.Text.ToString() + "WHERE Formular_ID =" + FormularID;
            Befehl.ExecuteNonQuery();
            Befehl.CommandText = "UPDATE email SET email=" + tbEmailUD.Text.ToString() + ",Name=" + tbNameUD.Text.ToString() + "WHERE Formular_FK =" + FormularID;
            Befehl.ExecuteNonQuery();  

Soweit so gut. Nun habe ich in dem Bearbeitungsformular aber noch ein Gridview, in dem aber nur die Felder für das angeklickte Formular gelistet werden sollen. Mir ist klar dass ich eine WHERE-Bedingung (WHERE Formular_ID = FormuladID (Da ich es ja als Variable gespeichert habe)) einbauen muss, aber ich weiss nicht wo. Habe es über den Query Builder gemacht, also klickibunti.

Zum besseren Verständnis sind im Anhang noch Bilder.

31.03.2010 - 13:10 Uhr

Danke,

so klappt es:


Befehl.CommandText = "SELECT MAX(Kunden_ID) FROM kunden";
string lastDelete = Befehl.ExecuteScalar().ToString();

Befehl.CommandText = "DELETE FROM kunden WHERE Kunden_ID = " + lastDelete;
Befehl.ExecuteNonQuery();

31.03.2010 - 11:40 Uhr

Hi MartinZa, danke für die schnelle Antwort

Hab es so gemacht:


Befehl.CommandText = "DELETE FROM kunden WHERE Kunden_ID = (SELECT MAX(Kunden_ID) FROM kunden)";
            Befehl.ExecuteNonQuery();

Allerdings bekomme ich die Fehlermeldung: You can't specify target table 'kunden' for update in FROM clause

31.03.2010 - 11:14 Uhr

verwendetes Datenbanksystem: MySQL InnoDB

Hallo,

ist es möglich die letzte erstellte ID (AI), also die höchste ID einer Tabelle zu löschen?
Beim SELECT habe ich dies mit MAX(ID) gelöst, aber wie würde das bei DELETE aussehen?

24.03.2010 - 16:21 Uhr

Hallo ich bins mal wieder 😄

Also mein Projekt besteht sozusagen aus drei Teilen: Festlegen des Namens und der Kundennummer für ein Projekt -> Formulargenerator -> fertiges Formular

Ich erstelle im ersten Teil also den Namen und die Kundennummer für mein Projekt. Nach dem Klick auf "Erstellen" landen diese in meiner Datenbank und bekommen eine ID (MySQL, AI). Die Frage ist nun wie ich diese ID für meinen 2. Teil nutzen kann bzw. wie ich diese beiden Teile miteinander verknüpfen kann, sodass sie miteinander verbunden sind?

Danke im Voraus

12.03.2010 - 15:55 Uhr

Hallo,

nachdem mein Formular gesendet wurde wird ganz oben ein feedback angezeigt ob das Ticket erfolgreich verschickt wurde oder nicht (Formular wird per SMTP gesendet).
Ich möchte das dieses div in dem das Label mit der Nachricht steht nach einer bestimmten Zeit (z.B. zwei Sekunden) nach oben slidet.

Ich hab also ein bisschen gegoogelt und bin dann auf jQuery gestoßen.

Das ist meine Feedbacknachricht


<div id="div_feedback">
            <asp:Label ID="L_Feedback" runat="server" Visible="False"></asp:Label>
            </div>

Falls es wen interessiert, so sieht meine Feedbackfunktion aus (ist noch nicht ganz fertig):


     void smtp_SendCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
        {
            if (e.Cancelled)
            {
                L_Feedback.Visible = true;
                L_Feedback.ForeColor = Color.Red;
                L_Feedback.Text = "Das Ticket konnte nicht erstellt werden".ToString();
                e.Error.ToString();
            }
            else
            {
                L_Feedback.Visible = true;
                L_Feedback.ForeColor = Color.Green;
                L_Feedback.Text = "Das Ticket wurde erfolgreich erstellt".ToString();
                EmptyForm(this);
            }
        }

Nun weiß ich leider nicht wie ich das mit jQuery realisieren soll. Ich denke für diejenigen, die sich damit beschäftigen ist es ein Kinderspiel 😃

26.02.2010 - 12:51 Uhr

Hallo,

der Benutzer hat die Wahl zwischen mehreren Artikeln die in der Konsole je nach dem was er sehen will angezeigt werden. Der Benutzer soll anhand der Artikelnummer (Wert in meiner Datenbank), der jeweiligen Produktgruppe den Artikel auswählen können. Dieser soll dann zb in einem Array gespeichert werden. Insgesamt gibt es 6 Artikel die hinzugefügt werden können. Der Gesamtpreis der Artikel soll dem Benutzer zum Schluss angezeigt werden.

Ich weiss jetzt nicht wie ich anhand der Artikelnummer die ja ein Primärkey in meiner Datenbank ist einen Artikel rauspicken und speichern kann.

Hier ist mein kompletter Code:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;

namespace msSQLTest
{
    enum e_Sortiment
    { 
      Schrauben, 
      Kugellager, 
      Achsen,
      Rollen, 
      Deck, 
      Griptape 
    }

    class Program
    {        
        private static SqlCommand Befehl = new SqlCommand();
        private static SqlConnection Verbindung = new SqlConnection();

        static void Main(string[] args)
        {
            Console.SetWindowSize(80, 70);
            SQLVerbindung();
            AuflistungSortiment();
            Auswahlmenu();            
            Verbindung.Close();
        }

        // Funktionen
        private static void SQLVerbindung()
    {
        Verbindung.ConnectionString = @"Data Source=C0780001\SQLEXPRESS;Initial Catalog=SkateboardCustomizer;User Id=sa;Password=123456789";
        Verbindung.Open();        
    }
        private static void AuflistungSortiment()
        {
            string[] a_Sortiment = { "1: Schrauben", "2: Kugellager", "3: Achsen", "4: Rollen", "5: Deck", "6: Griptape" };

            Console.WriteLine("Folgende Artikel sind im Sortiment:\n");
            for (int i = 0; i < 6; i++)
            {
                Console.WriteLine(a_Sortiment[i]);
            }            
        }
        private static void Auswahlmenu()
        {
            Console.WriteLine("\nWelche Produkte sollen angezeigt werden? (1-6)");
            int Auswahl = Convert.ToInt32(Console.ReadLine());

            switch (Auswahl)
            {
                case 1:
                    string s_Schrauben = "SELECT Artikelnummer, Schraubenart, Hersteller, Preis  FROM Schrauben " +
                                         "INNER JOIN Schraubenart ON (Schrauben.Schraubenart_ID = Schraubenart.Schraubenart_ID)" +
                                         "INNER JOIN Hersteller ON (Schrauben.Hersteller_ID = Hersteller.Hersteller_ID)" +
                                         "INNER JOIN Artikel ON (Schrauben.Artikel_ID = Artikel.Artikel_ID)";

                    Auslesen(s_Schrauben, "Schrauben");
                    break;
                case 2:
                    string s_Kugellager = "SELECT Artikelnummer, Hersteller, Material, Preis FROM Kugellager " +
                                          "INNER JOIN Hersteller ON (Kugellager.Hersteller_ID = Hersteller.Hersteller_ID)" +
                                          "INNER JOIN Artikel ON (Kugellager.Artikel_ID = Artikel.Artikel_ID) " +
                                          "INNER JOIN Material ON (Kugellager.Material_ID = Material.Material_ID)";
                    Auslesen(s_Kugellager, "Kugellager");
                    break;
                case 3:
                    string s_Achsen = "SELECT Artikelnummer, Hersteller, Hangerbreite, Farbe, Gewicht, Preis FROM Achsen " +
                                      "INNER JOIN Hersteller ON (Achsen.Hersteller_ID = Hersteller.Hersteller_ID) " +
                                      "INNER JOIN Artikel ON (Achsen.Artikel_ID = Artikel.Artikel_ID) " +
                                      "INNER JOIN Farbe ON (Achsen.Farbe_ID = Farbe.Farbe_ID)";
                    Auslesen(s_Achsen, "Achsen");
                    break;
                case 4:
                    string s_Rollen = "SELECT Artikelnummer, Hersteller, Haerte, Durchmesser, Farbe, Preis FROM Rollen " +
                                      "INNER JOIN Hersteller ON (Rollen.Hersteller_ID = Hersteller.Hersteller_ID) " +
                                      "INNER JOIN Artikel ON (Rollen.Artikel_ID = Artikel.Artikel_ID) " +
                                      "INNER JOIN Farbe ON (Rollen.Farbe_ID = Farbe.Farbe_ID)";
                    Auslesen(s_Rollen, "Rollen");
                    break;
                case 5:
                    string s_Deck = "SELECT Artikelnummer, Hersteller, Concave, Groeße, Wheelbase, ExtraPly, Preis FROM Deck " +
                                    "INNER JOIN Hersteller ON (Deck.Hersteller_ID = Hersteller.Hersteller_ID) " +
                                    "INNER JOIN Artikel ON (Deck.Artikel_ID = Artikel.Artikel_ID)";                                    
                    Auslesen(s_Deck, "Deck");
                    break;
                case 6:
                    string s_Griptape = "SELECT Artikelnummer, Hersteller, Farbe, Muster, Preis FROM Griptape " +
                                        "INNER JOIN Hersteller ON (Griptape.Hersteller_ID = Hersteller.Hersteller_ID) " +
                                        "INNER JOIN Artikel ON (Griptape.Artikel_ID = Artikel.Artikel_ID) " +
                                        "INNER JOIN Muster ON (Griptape.Griptape_ID = Muster.Muster_ID) " +
                                        "INNER JOIN Farbe ON (Griptape.Farbe_ID = Farbe.Farbe_ID)";
                    Auslesen(s_Griptape, "Griptape");
                    break;
                default:
                    Console.WriteLine("Keine gültige Eingabe. Nur Zahlen von 1-6");
                    Auswahlmenu();
                    break;                    
            }
            WarenkorbInput();
            AuflistungSortiment();            
            Auswahlmenu();
            
        }
        private static void Auslesen(string SelBefehl, string Titel)
        {
            Console.WriteLine("\n");
            Console.WriteLine("              " + Titel);
            Console.Write("-----------------------------------\n");
            Befehl.CommandText = SelBefehl;
            Befehl.Connection = Verbindung;            

            SqlDataReader MaterialOut = Befehl.ExecuteReader();
            while (MaterialOut.Read())
            {             
                string s_zeile = "";
                for (int i = 0; i < MaterialOut.FieldCount; i++)
                {
                    s_zeile += MaterialOut[i].ToString() +" ";
                }
                Console.WriteLine(s_zeile);                
            }
            Console.Write("-----------------------------------");
            
            MaterialOut.Close();
        }
        private static void WarenkorbInput()
        {
            Console.WriteLine("\n\nMöchtest du einen Artikel hinzufügen (j/n)?");
           string Auswahl = Console.ReadLine();

            switch (Auswahl)
            { 
                case "j":
                    Warenkorb();
                    break;
                case "n":
                    Auswahlmenu();
                        Console.WriteLine("\n\n");
                    break;
                default:
                    Console.WriteLine("ja oder nein!");
                    WarenkorbInput();
                    break;
            }
        }
        private static void Warenkorb()
        {
            int[] a_Warenkorb = { 0, 0, 0, 0, 0, 0};
            Console.WriteLine("\n\nWelchen Artikel möchstest du zum Warenkorb hinzufügen (Artikelnummer)?");
            int Auswahl = Convert.ToInt16(Console.ReadLine());

        }
    }
}


03.02.2010 - 08:46 Uhr

Hallo, wie im Titel schon steht liefert mein Würfelspiel keine zufälligen Ergebnisse. Bin noch Anfänger und hab wohl irgendwie nen logischen Fehler drinn.

Hauptklasse


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SkateDice
{
    // Classname
    static class Program
    {        
        static private Cube Cube_Placement;
        static private Cube Cube_Flip;
        static private Cube Cube_Rotation;
        static private Cube Cube_Direction;        
                
        static void Main(string[] args)
        {
            //Size of console window
            Console.SetWindowSize(80, 50);

            //Arrays for all 4 cubes. It is possible to add more fields to a cube
            e_CubeSide[] a_CubePlacement = { e_CubeSide.e_FAKIE, e_CubeSide.e_NOLLIE, e_CubeSide.e_REGULAR, e_CubeSide.e_SWITCH, e_CubeSide.e_SK8CROSS, e_CubeSide.e_SK8DICE };
            e_CubeSide[] a_CubeFlip = { e_CubeSide.e_HEELFLIP, e_CubeSide.e_HEELFLIP, e_CubeSide.e_KICKFLIP, e_CubeSide.e_KICKFLIP, e_CubeSide.e_SK8CROSS, e_CubeSide.e_SK8DICE };
            e_CubeSide[] a_CubeRotation = { e_CubeSide.e_180, e_CubeSide.e_180, e_CubeSide.e_360, e_CubeSide.e_360, e_CubeSide.e_SK8CROSS, e_CubeSide.e_SK8DICE };
            e_CubeSide[] a_CubeDirection = { e_CubeSide.e_BACKSIDE, e_CubeSide.e_BACKSIDE, e_CubeSide.e_FRONTSIDE, e_CubeSide.e_FRONTSIDE, e_CubeSide.e_SK8CROSS, e_CubeSide.e_SK8DICE };

            //Creates an object of each cube
            Cube_Placement = new Cube(a_CubePlacement);
            Cube_Flip = new Cube(a_CubeFlip);
            Cube_Rotation = new Cube (a_CubeRotation);
            Cube_Direction = new Cube(a_CubeDirection);
            
            //Just an output
            Intro();
            //User can Choose different functions (Manual and roll dice) with 'enter' and 'F1' Keys
            Menu();                    
        }

        // Functions

        // Menu function starts
        static void Menu()
        {
            // Declerates the pressed key from user as ConsoleKeyInfo
            ConsoleKeyInfo choice = Console.ReadKey();

            // Switch statement starts, so the user can chose between different functions
            switch (choice.Key)
            {
                // If user press F1 the manual function starts
                case ConsoleKey.F1:                    
                    Manual();
                    // Stops after the function and goes back to the start
                    break;
                // If user press enter it goes to the trickoutput function
                case ConsoleKey.Enter:                    
                    TrickOutput();
                    // Stops after the function and goes back to the start
                    break;
                    // Errormessage if user doesn't press 'F1' or 'Enter'
                default:
                    Console.WriteLine("Please press F1 for help or ENTER to roll dice");
                    // After the message it jumps back to menu function
                    Menu();
                    // Stops after the function and goes back to the start
                    break;
            }   
        }
        // Just an output
        static void Intro()
        {
            Console.WriteLine("\n");
            Console.WriteLine("                *****************   SK8 DICE v0.3   *****************\n");
            Console.WriteLine("                                    F1 for help");
            Console.WriteLine("                              Press ENTER to roll dice\n\n\n");


        }
        // Just an output
        static void Manual()
        {
            Console.WriteLine("Roll the dice and do the trick");
            Console.WriteLine("SWITCH | BACKSIDE | 180 | KICKFLIP");
            Console.WriteLine("-----------------------------------------");
            Console.WriteLine("Switch Backside Flip\n\n");
            Console.WriteLine("If SK8DICE or  SK8CROSS appears once or twice you can exclude those dice");
            Console.WriteLine("180 | KICKFLIP | FRONTSIDE | SK8DICE");
            Console.WriteLine("-----------------------------------------");
            Console.WriteLine("Frontside Flip\n\n");
            Console.WriteLine("If you roll a three way combination of SK8DICE or SK8CROSS, player must use the dice with the trick and add another trick to it");
            Console.WriteLine("HEELFLIP | SK8CROSS | SK8CROSS | SK8CROSS");
            Console.WriteLine("-----------------------------------------");
            Console.WriteLine("Inward Heelflip, Varial Heelflip, Fakie Frontside Heelflip...\n\n");
            Console.WriteLine("If all dice land on SK8DICE you can give a letter to another player or take awaya letter from youself");
            Console.WriteLine("SK8DICE | SK8DICE | SK8DICE | SK8DICE");
            Console.WriteLine("-----------------------------------------");
            Console.WriteLine("Take away a letter from yourself or give another player a letter...\n\n");
            Console.WriteLine("If all dice land on SK8CROSS player can choose any trick");
            Console.WriteLine("SK8CROSS | SK8CROSS | SK8CROSS | SK8CROSS");
            Console.WriteLine("-----------------------------------------");
            Console.WriteLine("Choose any trick...\n");
            Console.WriteLine("\n\n\nPress ENTER to roll dice\n");
            Menu();
        }
        // trickoutput starts
        static void TrickOutput()
        {
            // Declerates a variable input  from user as string
            string UserInput = "";
            // do-while loop starts here
            do
            {
                // Generates a random field for each cube from the cube-class
                Cube_Placement.RandomRoll();
                Cube_Flip.RandomRoll();
                Cube_Direction.RandomRoll();
                Cube_Rotation.RandomRoll();

                // Output from the randomresult for each cube. The first two letters from the enumeration which are used for the output are cuttet away
                string s = string.Format("Your trick:\n{0} | {1} | {2} | {3}\n", Cube_Placement.Result.ToString().Substring(2), Cube_Rotation.Result.ToString().Substring(2), Cube_Flip.Result.ToString().Substring(2), Cube_Direction.Result.ToString().Substring(2) );
                Console.WriteLine(s);
                // To stop the Loop after 'Enter' Input
                Console.ReadKey();             


                // 
            }while (UserInput != ConsoleKey.Enter.ToString());
        }              
    }
}


Objektklasse (Würfel)


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SkateDice
{    
    // Enumeration which is used for the output
    enum e_CubeSide
    {
        e_SK8CROSS,
        e_FAKIE,
        e_NOLLIE,
        e_REGULAR,
        e_SWITCH,
        e_SK8DICE,
        e_360,
        e_180,
        e_FRONTSIDE,
        e_BACKSIDE,
        e_KICKFLIP,
        e_HEELFLIP
    }

    // Classname
    class Cube
    {
        // m_QuantitySites is decelerated as integer
        private int m_QuantitySides;
        private e_CubeSide[] m_Cubesides;
        private int m_Result = -1;        
        private int QuantitySides
        {
            get { return m_QuantitySides; }           
        }
        
        public e_CubeSide Result
        {
            get { return m_Cubesides[m_Result]; }
        }

        // Random function for the dice
        public void RandomRoll()
        {
            // Creates a variable (rnd) for random
            Random rnd = new Random(DateTime.Now.Millisecond);
            // Creates random number between 0 and m_QuantitySites (default 6) 
            m_Result = rnd.Next(m_QuantitySides);
        }

        // Constructor 
        public Cube(e_CubeSide[] Sides)
        {        
            // Cubesides get automaticly counted from the quantity of fields in the array (variable cube) 
            m_QuantitySides = Sides.Count();
            m_Cubesides = Sides;            
        }                        
    }
}


29.01.2010 - 11:38 Uhr

Danke, funktioniert jetzt 😃

29.01.2010 - 08:57 Uhr

Hallo, folgender Code




using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SkateDice
{
    enum e_CubeSide
    {
        e_SK8CROSS,
        e_FAKIE,
        e_NOLLIE,
        e_REGULAR,
        e_SWITCH,
        e_SK8DICE,
        e_360,
        e_180,
        e_FRONTSIDE,
        e_BACKSIDE,
        e_KICKFLIP,
        e_HEELFLIP
    }

    class Cube
    {
        private int m_QuantitySites;
        private e_CubeSide[] m_Cubesites;
        private int m_Result = -1;

        private int QuantitySites
        {
            get { return m_QuantitySites; }           
        }

        private e_CubeSide Result
        {
            get { return m_Cubesites[m_Result]; }
        }

        public void RandomSide()
        {
            Random rnd = new Random();
            m_Result = rnd.Next(0, m_QuantitySites + 1);            
        }

        public Cube(e_CubeSide[] Sides )
        {
            m_QuantitySites = Sides.Count();
            m_Cubesites = Sides;
        }
    }
}

Wie kann ich das Ergebnis jetzt als Output in meine "Hauptklasse" einfügen?
Die vier verschiedenen Würfel (Objekte) habe ich in meiner Hauptklasse schon erstellt:

namespace SkateDice
{
    static class Program
    {
        static private Cube Cube_Placement;
        static private Cube Cube_Flip;
        static private Cube Cube_Rotation;
        static private Cube Cube_Direction;
                
        static void Main(string[] args)
        {
            Console.SetWindowSize(80, 50);

            e_CubeSide[] a_CubePlacement = { e_CubeSide.e_FAKIE, e_CubeSide.e_NOLLIE, e_CubeSide.e_REGULAR, e_CubeSide.e_SWITCH, e_CubeSide.e_SK8CROSS, e_CubeSide.e_SK8DICE };
            e_CubeSide[] a_CubeFlip = { e_CubeSide.e_HEELFLIP, e_CubeSide.e_KICKFLIP, e_CubeSide.e_SK8CROSS, e_CubeSide.e_SK8DICE };
            e_CubeSide[] a_CubeRotation = { e_CubeSide.e_180, e_CubeSide.e_360, e_CubeSide.e_SK8CROSS, e_CubeSide.e_SK8DICE };
            e_CubeSide[] a_CubeDirection = { e_CubeSide.e_BACKSIDE, e_CubeSide.e_FRONTSIDE, e_CubeSide.e_SK8CROSS, e_CubeSide.e_SK8DICE };

            Cube_Placement = new Cube(a_CubePlacement);
            Cube_Flip = new Cube(a_CubeFlip);
            Cube_Rotation = new Cube (a_CubeRotation);
            Cube_Direction = new Cube(a_CubeDirection);

Mir fehlt nur noch der Output

22.01.2010 - 11:43 Uhr

Gibt es irgendeine Möglichkeit in der Enumeration nur die Zahl 360 und 180 stehen zu haben? Also ohne "e_" oder sonstiges, da ich ja die Enumerationen als Ausgabe verwende

22.01.2010 - 10:43 Uhr

Danke das hat mir wirklich sehr weiter geholfen 👍

22.01.2010 - 10:12 Uhr

Ok das sieht schonmal besser aus, allerdings darf ein Würfel ja nicht zwei mal vorkommen und auf jedem Würfel gibt es verschiedene Tricks (siehe Arrays)

22.01.2010 - 09:47 Uhr

Hallo,

ich möchte das Skateboardspiel sk8 Dice als Konsolenanwendung programmieren. Bin aber noch ein totaler Anfänger und brauch mal Eure Hilfe.

Kurze Info zum Spiel: Der Spielder würfelt vier Würfel. Auf jedem Würfel stehen verschiedene Vorraussetzungen für den Trick. Alle vier zusammen ergeben dann den Gesamttrick, der ausgeführt werden soll.

Ich komme jetzt bei der Randomfunktion leider nicht weiter. Es soll halt eine "Voraussetzung" zufällig erstellt werden (also ein Feld auf einem Würfel). Im Code findet ihr noch mal eine kleine Doku.

Hier mal mein Code


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SkateDice
{
    class Program
    {
        static string UserInput = "";

        enum e_CubeSide
        {
            e_SK8CROSS,
            e_Fakie,
            e_Nollie,
            e_Regular,
            e_Switch,
            e_SK8DICE,
            e_360,
            e_180,
            e_Fronside,
            e_Backside,
            e_Kickflip,
            e_Heelflip,
        }


        static e_CubeSide[] a_CubePlacement = { e_CubeSide.e_Fakie, e_CubeSide.e_Nollie, e_CubeSide.e_Regular, e_CubeSide.e_Switch, e_CubeSide.e_SK8CROSS, e_CubeSide.e_SK8DICE };
        static e_CubeSide[] a_CubeFlip = { e_CubeSide.e_Heelflip, e_CubeSide.e_Kickflip, e_CubeSide.e_SK8CROSS, e_CubeSide.e_SK8DICE };
        static e_CubeSide[] a_CubeRotation = { e_CubeSide.e_180, e_CubeSide.e_360, e_CubeSide.e_SK8CROSS, e_CubeSide.e_SK8DICE};
        static e_CubeSide[] a_CubeDirection = { e_CubeSide.e_Backside, e_CubeSide.e_Fronside, e_CubeSide.e_SK8CROSS, e_CubeSide.e_SK8DICE };

        static void Main(string[] args)
        {
            Intro();
            Random();
            SingleOutput();
            
        }

        //Funktionen

        static void Intro()
        {
            Console.WriteLine("\n");
            Console.WriteLine("                *****************   SK8 DICE   *****************\n");
            Console.WriteLine("                           Press ENTER to roll dices");  
        }
        static void Random()
        {
            ConsoleKeyInfo info = Console.ReadKey();
            do
                  
            {
                if (info.Key == ConsoleKey.Enter)
                {
                    Random rnd = new Random();


                    /* HIER SOLLEN ZUFÄLLIGE WERTE AUS DEN ARRAYS (z.B. a_CubePlacement) ERSTELLT WERDEN, WELCHE SPÄTER ZUM GESAMTERGEBIS ADDIERT WERDEN
                     * (ALSO ALLE 4 WÜRFEL ERGEBEN DEN TRICK, DER AUSGEFÜHRT WERDEN SOLL)
                    for (int i = 0; i < 11; i++)
                    {
                        e_CubeSide whichTrickToDo = (e_CubeSide)(rnd.Next() % 11);
                        Console.Write(whichTrickToDo.ToString() + '\n');
                    }
                    */

                    Console.WriteLine();
                    Console.ReadLine();
                }                  

            } while (UserInput != ConsoleKey.Enter.ToString());
           
            Console.WriteLine("funzt");



        }
        static void SingleOutput()
        { 
        
        }
    }
}