Win 7 neu aufgesetzt. Nun läufts 😉
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 ...
Oh, habe vergessen, dass die Daten nicht auf der Website angezeigt werden, sondern als Exceldatei zum Download angeboten werden.
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.
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.
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.
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?
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,
};
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.
Holla da hast du dir aber Mühe gegeben! Vielen Dank. Ich werde das morgen auf der Arbeit mal ausprobieren 😃
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;
}
Vielen Dank ihr hattet recht. Hatte in meiner CSS Klasse
fieldset
{
margin: 1em 0px;
padding: 1em;
border: 1px solid #ccc;
height: 134px;
}
stehen 😛
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>
Sorry, ich bin da noch nicht so fit
Aber vielen Dank, es klappt jetzt! 👍
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
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();
}
So um es zu beenden:
foreach (GridViewRow row in GridView2.Rows)
{
CheckBox cb = (CheckBox)row.Cells[1].Controls[0];
cb.Enabled = true;
}
😃
Heißt das ich erstelle ein TemplateField und packe da meine Checkboxen rein, damit ich in den "writemodus" wechseln kann?
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.
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");
}
}
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();
Danke für den Hinweis, ich werde mir das wohl mal genauer anschauen müssen 😃
Aber wie komme ich mit meinem Problem jetzt weiter?
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.
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();
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
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?
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
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 😃
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());
}
}
}
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;
}
}
}
Danke, funktioniert jetzt 😃
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
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
Danke das hat mir wirklich sehr weiter geholfen 👍
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)
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()
{
}
}
}