Autor Beitrag
c#amateur
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mo 07.12.09 22:27 
Hallo,

ich möchte zu Übungszwecken ein einfaches Beschaffunsprogramm erstellen. Vorgegeben wird dazu der Visual Web Developer von Microsoft.

Der Aufbau der Datenbank ist vorgegeben, diese habe ich mit access erstellt und ist folgendermaßen aufgebaut:

Lieferant (LID, Name, Lieferzeit, Status)
Material(MID, Beschreibung, Form, Größe)
Bedarfsmeldung(BID, MatID, MaxLieferzeit, Anzahl)
Angebote (AngebotID, MID, Anzahl, Preis, Lieferant)
Bestellung (BestellID, Gesamtpreis, Lieferant, Währung)
Bestellposition (BestellposID, BID, Bestellung, Angebot, Währung)

Es soll über ein Interface möglich sein Daten einzugeben zu löschen und zu ändern. Das habe ich auch soweit ohne Probleme geschafft indem ich für jede Tabelle eine aspx-Seite im Developer erstellt habe, eine Datenbankverbindung hinzufüge und ein DetailView Element herübergezogen haben, welches die Datensätze einzeigt und ein ändern/löschen erlaubt. Bisher waren also noch keine Programmierkenntisse nötig, alles ging per Drag and Drop.

Jetzt soll ich aber einen Algorhytmus mit C# hinzufügen, der für eine Bestellung den Lieferanten mit den besten Konditionen ermittelt (d.h. den niedrigsten Gesamtpreis). Außerdem soll die MaxLieferzeit berücksichtigt werden, d.h. wenn diese überschritten wird vom Lieferanten sollte zum nächst teureren gesprungen werden. Ich stelle mir das so vor, dass ich einen Button habe „besten Lieferant wählen und mir daraufhin das Programm die Felder Gesamtpreis / Lieferant (von der Tabelle Lieferant) autom. Ausfüllt. Bisher kann ich das mit meinem Detail-View-Element nur selber eingeben/verändern.

Das Problem ist, dass ich nur Anfängerkenntnisse im c# habe.

Ich denke mir, dass der Algorhytmus für alle Bestellpos. mit gleichlautender BestellID erst durch die BID auf die MatID und die Anzahl in der Tabelle Bedarfsmeldung zugreifen muss, dann muss er sich den Preis aus der Angebote-Tabelle holen und alles entsprechend der jeweiligen Lieferanten addieren. Gleichzeitig muss der evtl. Mengenunterschied zwischen Angebote und Bedarfsmeldung berücksichtigt werden. Außerdem muss die Lieferzeit, die unter Lieferant gespeichert ist kleiner sein als die MaxLieferzeit in der Bedarfsmeldungstabelle.

Nur wie drücke ich das jetzt in c# aus. Kann mir jemand einen Tipp geben wie ich den Algorhytmus aufbauen muss und wo ich den überhaupt reinschreibe bzw. mit dem restlichen Programm verknüpfe.

Ich habe drei Dateien im Web-Developer vorliegen deren Code ich jetzt mal hier angebe:

Ich denke, dass ich ihn Order.aspx.cs den Programmcode für den Algorhytmus schreiben muss bin mir aber nicht ganz sicher. Könnte mir vielleicht jemand grob skizzieren wie dieser aussehen könnte bwz. was ich machen muß? Ich stehe echt auf dem Schlauch

Schonmal Danke

Order.aspx

ausblenden volle Höhe XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Orders.aspx.cs" Inherits="WebApplication1.Orders" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
    <style type="text/css">
        #form1
        {
            height: 751px;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
        <asp:AccessDataSource ID="AccessDataSource1" runat="server" 
            DataFile="~/App_Data/db1.mdb" 
            DeleteCommand="DELETE FROM [Order] WHERE [OrID] = ?" 
            InsertCommand="INSERT INTO [Order] ([OrID], [Total Price], [Supplier], [Currency]) VALUES (?, ?, ?, ?)" 
            SelectCommand="SELECT * FROM [Order]" 
            UpdateCommand="UPDATE [Order] SET [Total Price] = ?, [Supplier] = ?, [Currency] = ? WHERE [OrID] = ?">
            <DeleteParameters>
                <asp:Parameter Name="OrID" Type="Int32" />
            </DeleteParameters>
            <UpdateParameters>
                <asp:Parameter Name="Total_Price" Type="Decimal" />
                <asp:Parameter Name="Supplier" Type="Int32" />
                <asp:Parameter Name="Currency" Type="String" />
                <asp:Parameter Name="OrID" Type="Int32" />
            </UpdateParameters>
            <InsertParameters>
                <asp:Parameter Name="OrID" Type="Int32" />
                <asp:Parameter Name="Total_Price" Type="Decimal" />
                <asp:Parameter Name="Supplier" Type="Int32" />
                <asp:Parameter Name="Currency" Type="String" />
            </InsertParameters>
        </asp:AccessDataSource>
        <asp:DetailsView ID="DetailsView1" runat="server" AllowPaging="True" 
            AutoGenerateRows="False" CellPadding="4" DataKeyNames="OrID" 
            DataSourceID="AccessDataSource1" ForeColor="#333333" GridLines="None" 
            Height="236px" Width="174px">
            <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
            <CommandRowStyle BackColor="#D1DDF1" Font-Bold="True" />
            <RowStyle BackColor="#EFF3FB" />
            <FieldHeaderStyle BackColor="#DEE8F5" Font-Bold="True" />
            <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
            <Fields>
                <asp:BoundField DataField="OrID" HeaderText="OrID" InsertVisible="False" 
                    ReadOnly="True" SortExpression="OrID" />
                <asp:BoundField DataField="Total Price" HeaderText="Total Price" 
                    SortExpression="Total Price" />
                <asp:BoundField DataField="Supplier" HeaderText="Supplier" 
                    SortExpression="Supplier" />
                <asp:BoundField DataField="Currency" HeaderText="Currency" 
                    SortExpression="Currency" />
                <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" 
                    ShowInsertButton="True" />
            </Fields>
            <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
            <EditRowStyle BackColor="#2461BF" />
            <AlternatingRowStyle BackColor="White" />
        </asp:DetailsView>
    
    </div>
    
    
    <asp:AccessDataSource ID="AccessDataSource2" runat="server" 
        DataFile="~/App_Data/db1.mdb" 
        DeleteCommand="DELETE FROM [OrderPos] WHERE [OrPosID] = ?" 
        InsertCommand="INSERT INTO [OrderPos] ([OrPosID], [PRID], [Order], [Offer], [Currency]) VALUES (?, ?, ?, ?, ?)" 
        onselecting="AccessDataSource2_Selecting" 
        SelectCommand="SELECT * FROM [OrderPos]" 
        UpdateCommand="UPDATE [OrderPos] SET [PRID] = ?, [Order] = ?, [Offer] = ?, [Currency] = ? WHERE [OrPosID] = ?">
        <DeleteParameters>
            <asp:Parameter Name="OrPosID" Type="Int32" />
        </DeleteParameters>
        <UpdateParameters>
            <asp:Parameter Name="PRID" Type="Int32" />
            <asp:Parameter Name="Order" Type="Int32" />
            <asp:Parameter Name="Offer" Type="Int32" />
            <asp:Parameter Name="Currency" Type="String" />
            <asp:Parameter Name="OrPosID" Type="Int32" />
        </UpdateParameters>
        <InsertParameters>
            <asp:Parameter Name="OrPosID" Type="Int32" />
            <asp:Parameter Name="PRID" Type="Int32" />
            <asp:Parameter Name="Order" Type="Int32" />
            <asp:Parameter Name="Offer" Type="Int32" />
            <asp:Parameter Name="Currency" Type="String" />
        </InsertParameters>
    </asp:AccessDataSource>
    <asp:DetailsView ID="DetailsView2" runat="server" AllowPaging="True" 
        AutoGenerateRows="False" CellPadding="4" DataKeyNames="OrPosID" 
        DataSourceID="AccessDataSource2" ForeColor="#333333" GridLines="None" 
        Height="257px" onpageindexchanging="DetailsView2_PageIndexChanging" 
        Width="125px">
        <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
        <CommandRowStyle BackColor="#D1DDF1" Font-Bold="True" />
        <RowStyle BackColor="#EFF3FB" />
        <FieldHeaderStyle BackColor="#DEE8F5" Font-Bold="True" />
        <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
        <Fields>
            <asp:BoundField DataField="OrPosID" HeaderText="OrPosID" InsertVisible="False" 
                ReadOnly="True" SortExpression="OrPosID" />
            <asp:BoundField DataField="PRID" HeaderText="PRID" SortExpression="PRID" />
            <asp:BoundField DataField="Order" HeaderText="Order" SortExpression="Order" />
            <asp:BoundField DataField="Offer" HeaderText="Offer" SortExpression="Offer" />
            <asp:BoundField DataField="Currency" HeaderText="Currency" 
                SortExpression="Currency" />
            <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" 
                ShowInsertButton="True" />
        </Fields>
        <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
        <EditRowStyle BackColor="#2461BF" />
        <AlternatingRowStyle BackColor="White" />
    </asp:DetailsView>
    
    </form>
</body>
</html>


Order.aspx.cs

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication1
{
    public partial class Orders : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void DetailsView2_PageIndexChanging(object sender, DetailsViewPageEventArgs e)
        {

        }

        protected void AccessDataSource2_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
        {

        }
    }
}

Order.aspx.designer.cs

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
//------------------------------------------------------------------------------
// <auto-generated>
//     Dieser Code wurde von einem Tool generiert.
//     Laufzeitversion:2.0.50727.4016
//
//     Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
//     der Code erneut generiert wird.
// </auto-generated>
//------------------------------------------------------------------------------

namespace WebApplication1 {
    
    
    public partial class Orders {
        
        /// <summary>
        /// form1-Steuerelement
        /// </summary>
        /// <remarks>
        /// Automatisch generiertes Feld
        /// Um dies zu ändern, verschieben Sie die Felddeklaration aus der Designerdatei in eine Code-Behind-Datei.
        /// </remarks>
        protected global::System.Web.UI.HtmlControls.HtmlForm form1;
        
        /// <summary>
        /// AccessDataSource1-Steuerelement
        /// </summary>
        /// <remarks>
        /// Automatisch generiertes Feld
        /// Um dies zu ändern, verschieben Sie die Felddeklaration aus der Designerdatei in eine Code-Behind-Datei.
        /// </remarks>
        protected global::System.Web.UI.WebControls.AccessDataSource AccessDataSource1;
        
        /// <summary>
        /// DetailsView1-Steuerelement
        /// </summary>
        /// <remarks>
        /// Automatisch generiertes Feld
        /// Um dies zu ändern, verschieben Sie die Felddeklaration aus der Designerdatei in eine Code-Behind-Datei.
        /// </remarks>
        protected global::System.Web.UI.WebControls.DetailsView DetailsView1;
        
        /// <summary>
        /// AccessDataSource2-Steuerelement
        /// </summary>
        /// <remarks>
        /// Automatisch generiertes Feld
        /// Um dies zu ändern, verschieben Sie die Felddeklaration aus der Designerdatei in eine Code-Behind-Datei.
        /// </remarks>
        protected global::System.Web.UI.WebControls.AccessDataSource AccessDataSource2;
        
        /// <summary>
        /// DetailsView2-Steuerelement
        /// </summary>
        /// <remarks>
        /// Automatisch generiertes Feld
        /// Um dies zu ändern, verschieben Sie die Felddeklaration aus der Designerdatei in eine Code-Behind-Datei.
        /// </remarks>
        protected global::System.Web.UI.WebControls.DetailsView DetailsView2;
    }
}

Moderiert von user profile iconKha: C#- und XML-Tags hinzugefügt
gfoidl
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 157
Erhaltene Danke: 19

Win XP
C#, Fortran 95 - Visual Studio
BeitragVerfasst: Di 08.12.09 01:01 
Hallo,

bitte keine Crossposts, wenn schon gibt die andere Quelle an. Dort hast du auch Hinweise bekommen und diese gelten auch hier.

Gruss
Günther

_________________
Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!
c#amateur Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Di 08.12.09 01:15 
Hallo Günther,

naja Hinweise ist gut, wenn man darunter den dezenten Verweis versteht mal ein C#-Buch durchzuackern. Soviel Zeit kann ich in das Nebenfachprojekt nicht investieren. Ich habe leider nur Anfängerkenntnisse im Programmieren. Ich erwarte ja nicht, dass mir jemand einfach die Lösung hinschreibt, sondern nur einen Tip/Idee wie sich bzw. mit welchen Mitteln sich der Algorythmus programmieren lässt, sozusagen ein Ansatz damit ich spezifischer nachforschen kann.

Mfg
gfoidl
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 157
Erhaltene Danke: 19

Win XP
C#, Fortran 95 - Visual Studio
BeitragVerfasst: Di 08.12.09 02:03 
Hallo,

der Hinweis ist dahingehend gemeint dass es sehr unhöflich ist mehrere Foren und somit mehrere Leute mit ein und dem selben Problem zu beauftragen nur weil man selber zu wenig Zeit hat oder zu faul ist das Problem selber lösen zu versuchen.

Wenn du einen Crossposts erstellst wäre es wenigstens angebracht einen Link auf die andere Frage zu erstellen. Sonst entsteht für die Helfenden unnötiger Aufwand und alle Helfenden tun dies in ihrer Freizeit und haben genauso wenig Zeit dein Problem zu lösen wie du es hast.

Zumal zeigst du ziemlich viel Code der abschreckend wirkt. Beschränke dich auf das wesentliche und Nenne die Punkte wo du Probleme hast bzw. frage konkret danach.

Warum wählst du überhaupt ein Nebenfach wenn du im Vorhinein schon weißt dass du keine Ahnung und Zeit hast um dich damit zu beschäftigen?

BTW: Algorithmus wird so wie ich gerade geschrieben habe geschrieben. Es kommt zwar vom griechischen, aber es ist nicht so griechisch wie du es schreibst.

Das ist nicht böse gemeint, sondern als Hinweis wie es besser gemacht wird und somit steigt deine Chance darauf dass dir geholfen wird.


Gruss
Günther

_________________
Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!