【问题标题】:Wpf assignment - Auction saleWpf 分配 - 拍卖
【发布时间】:2014-03-12 09:48:38
【问题描述】:

有人可以帮我完成学校作业吗?我是这方面的初学者,有很多我不明白的事情。我现在要去学校学习编程,但对我来说学习速度很慢,教授给了我们任务,但不幸的是我不知道如何解决它。有人能帮我吗?请。

作业如下:

“拍卖”

创建用于拍卖的 WPF 应用程序,其中包含以下内容:
-应用程序包括管理用户的系统,实现了低谷数据库。它必须至少有两个用户(管理员和普通用户)。
-Auctions 正在从数据库中获取数据
- 在拍卖的主窗口中,它显示了目前正在拍卖的所有产品。对于每种产品,它都会显示有关价格、最后报价和最后投标人的数据。
- 未登录用户有权观看所有拍卖信息,但无权投标。
-普通用户仅有权投标价格
-管理员有权输入新产品和删除现有产品。输入新产品的所有内容都必须输入他的起始价格,名称和其他信息。

拍卖应该如何运作:

输入产品的那一刻,该产品的拍卖开始,倒计时开始。每次拍卖有 2 分钟的时间完成。只要用户出价,拍卖时间就会重新开始,并获得额外的 2 分钟。当用户对产品出价时,产品的价格每增加一美元。拍卖结束后,最后出价的用户将被标记为获胜者,拍卖即将结束,其他用户无法使用。

我尝试创建一些我的代码,但我得到了不同的错误。

一些错误消息,但还有更多:'AukcijskaProdaja.MainWindow' 不包含'button1_Click' 的定义,并且找不到接受'AukcijskaProdaja.MainWindow' 类型的第一个参数的扩展方法'button1_Click'(是您缺少 using 指令或程序集引用?);名称“conn”在当前上下文 c:\users\denis\documents\visual studio 中不存在;命名空间“AukcijskaProdaja”中不存在类型或命名空间名称“AukcijaDataSet”(您是否缺少程序集引用?)

xaml:

Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded">
    <my:AukcijaDataSet x:Key="aukcijaDataSet" />
  <CollectionViewSource x:Key="aukcija_bazeViewSource" Source="{Binding        Path=Aukcija_baze, Source={StaticResource aukcijaDataSet}}" />
  <Grid>
    <DataGrid AutoGenerateColumns="False" EnableRowVirtualization="True" Height="136"   HorizontalAlignment="Left" ItemsSource="{Binding}" Margin="78,22,0,0" Name="aukcija_bazeDataGrid" RowDetailsVisibilityMode="VisibleWhenSelected" VerticalAlignment="Top" Width="391">
        <DataGrid.Columns>
            <DataGridTextColumn x:Name="aukcijaIdColumn" Binding="{Binding Path=AukcijaId}" Header="Aukcija Id" Width="SizeToHeader" />
            <DataGridTextColumn x:Name="artikalNameColumn" Binding="{Binding Path=ArtikalName}" Header="Artikal Name" Width="SizeToHeader" />
            <DataGridTextColumn x:Name="cijenaColumn" Binding="{Binding Path=Cijena}" Header="Cijena" Width="SizeToHeader" />
        </DataGrid.Columns>
    </DataGrid>
    <Label Content="AukcijaId" Height="23" HorizontalAlignment="Left" Margin="69,268,0,0" Name="label1" VerticalAlignment="Top" Width="83" />
    <Label Content="ArtikalName" Height="24" HorizontalAlignment="Left" Margin="154,267,0,0" Name="label2" VerticalAlignment="Top" Width="68" />
    <TextBox Height="23" HorizontalAlignment="Left" Margin="69,240,0,0" Name="AukcijaId" VerticalAlignment="Top" Width="63" DataContext="{Binding Path=aukcijaIdColumn}" />
    <TextBox Height="23" HorizontalAlignment="Left" Margin="154,240,0,0" Name="ArtikalName" VerticalAlignment="Top" Width="68" DataContext="{Binding Path=artikalNameColumn}"/>
    <Button Content="Ponuda" Height="26" HorizontalAlignment="Left" Margin="242,240,0,0" Name="button1" VerticalAlignment="Top" Width="68" Click="button1_Click" />
    <Label Content="Vrijeme" HorizontalAlignment="Left" Margin="378,240,0,148" Name="label4" Width="81" />
    <Label Content="Unesi ponudu" Height="28" HorizontalAlignment="Left" Margin="69,206,0,0" Name="label5" VerticalAlignment="Top" Width="83" />
    <ListBox Height="38" HorizontalAlignment="Left" Margin="78,153,0,0" Name="listBox1" VerticalAlignment="Top" Width="391" />
</Grid>

C#:

namespace AukcijskaProdaja
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        AukcijskaProdaja.AukcijaDataSet aukcijaDataSet = ((AukcijskaProdaja.AukcijaDataSet)(this.FindResource("aukcijaDataSet")));
        // Load data into the table Aukcija_baze. You can modify this code as needed.
        AukcijskaProdaja.AukcijaDataSetTableAdapters.Aukcija_bazeTableAdapter aukcijaDataSetAukcija_bazeTableAdapter = new AukcijskaProdaja.AukcijaDataSetTableAdapters.Aukcija_bazeTableAdapter();
        aukcijaDataSetAukcija_bazeTableAdapter.Fill(aukcijaDataSet.Aukcija_baze);
        System.Windows.Data.CollectionViewSource aukcija_bazeViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("aukcija_bazeViewSource")));
        aukcija_bazeViewSource.View.MoveCurrentToFirst();
    }

    public void BindMyData()
    {
        try
    {
        conn.Open();
        SqlCommand comm = new SqlCommand("SELECT * FROM Aukcija_baze", conn);
        DataSet ds = new DataSet();
        SqlDataAdapter da = new SqlDataAdapter(comm);
        da.Fill(ds);
        aukcija_bazeDataGrid.ItemsSource = ds.Tables[0].DefaultView;
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message.ToString());
    }
    finally
    {
        conn.Close();
    }

    BindMyData();
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        try
        {
            conn.Open();
            SqlCommand comm = new SqlCommand("INSERT INTO Aukcija_baze VALUES(" + AukcijaId.Text + ",'" + ArtikalName.Text + "',", conn);
            comm.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message.ToString());
        }
        finally
        {
            conn.Close();
            BindMyData();
        }

        {
            DispatcherTimer dispatcherTimer = new DispatcherTimer();
            dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
            dispatcherTimer.Interval = new TimeSpan(0, 0, 1);
            dispatcherTimer.Start();

        }

    }
    private void dispatcherTimer_Tick(object sender, EventArgs e)
    {

    }
}

}

【问题讨论】:

  • 请添加一些信息:您遇到了什么错误?你的问题不能很好地回答。请参阅 stackoverflow.com/help/how-to-ask 了解一个好的问题是什么样的
  • 嗨,Sascha,我在上面编辑了出现的错误,但我可以看到我的代码一点都不好,显然需要重写。也可以尝试将我的代码复制粘贴到 Visual Studio 中,然后会看到所有错误。
  • @Ronin 所以我们的工作是重写你的代码并纠正你的程序?在提出问题之前,您是否尝试在 Google 中搜索这些错误?
  • +1,我同意可以进行更多研究,但这是一个明确的问题,已发布尝试解决该问题。

标签: c# sql wpf


【解决方案1】:

您似乎没有包含所有代码,但我会指出我看到的错误:

  1. 在“BindMyData”和您的点击处理程序中,您使用“conn”变量。这个变量永远不会被声明。一般来说,SqlConnections 应该是短暂的,所以应该在每个使用它的函数中声明它,而不是在类级别。无论如何,您需要在这些函数可以看到它的某个范围内声明它。

  2. 在 Window_Loaded 中,有一个 AukcijaDataSet 类型的变量,它没有发布代码。鉴于我不认为您打算重写数据集类,这(以及其他类似的行,如 AukcijaDataSetTableAdapters)应该使用标准的 .NET 名称(如 DataSet)。如果您确实打算重写这些类,请确保您有一个命名空间的 using 语句,如果这些在外部库中,请确保您的项目中有一个引用。

  3. 您正在设置文本框的“DataContext”属性,并将 DataGrid 绑定到整个窗口数据上下文。假设您的 CollectionViewSource 绑定有效(我严重怀疑,您需要一个合适的视图模型),您将使用静态资源绑定。文本框应将其文本属性绑定到视图模型的属性,而不是设置其数据上下文。

您的列绑定乍一看实际上还不错,而且总体上您肯定走在正确的轨道上。不过,它确实需要进行大量清理,并且正确的 MVVM 设置会有所帮助。

您还应该尝试用谷歌搜索 cmets 指出的错误。每当您看到“找不到”或“不存在”类型错误时,这意味着您缺少声明(如果是变量)或缺少类定义或引用(如果它位于类型名称上)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-08
    • 2023-03-15
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 1970-01-01
    相关资源
    最近更新 更多