创建组件并设置它的位置

时间:2017-01-18 11:44:11

标签: c# wpf loops components

我正在开发一个用于个人费用控制的财务管理WPF应用程序。我的应用程序中有一个名为“Records”的标签,它显示以前购买的产品的所有记录。我有这个DAO方法给我所有的记录。

 public List<TOProduct> LoadRecords(int id)
    {
        List<TOProduct> i = new List<TOProduct>();

    try
        {


            string sql = "select * from tbl_records where user_id = " + id + " and product_status = true";

            con = ConnectionFactory.Connection();

            MySqlCommand cmd = new MySqlCommand(sql, con);

            con.Open();

            MySqlDataReader dtreader = cmd.ExecuteReader();


                while (dtreader.Read())//If there's any data.
                {
                    TOProduct x = new TOProduct();

                    x.Id = dtreader.GetInt16("product_id");
                    x.Link = dtreader.GetString("product_link");
                    x.Name = dtreader.GetString("product_name");
                    x.Type = dtreader.GetString("product_type");
                    x.Price = dtreader.GetDouble("product_price");
                    x.Store = dtreader.GetString("product_store");
                    x.BuyingDate = dtreader.GetDateTime("product_buyingDate").ToString("dd-MM-yyyy"); ;

                    i.Add(x);

                }

                con.Close();

            }
        }
        catch (MySqlException e)
        {
            throw new Exception(e.Message);
        }

        return i;
    }

哪种方法效果很好。现在,在我看来,我想创建一个包含三个标签的面板:产品名称标签,产品价格标签和产品购买日期标签。问题是,我想为我的方法返回的每个注册创建一个带有这三个标签的面板。此外,我需要一个滚动条,因为用户可以有1或1000条记录,以防万一不适合屏幕。这些面板必须作为清单列出。我知道我可以创建某种for(int i = 0; int i < number_of_records; i++)。问题是组件的创建及其在屏幕上的位置。

有人能告诉我是否有办法创建这些组件并在屏幕上按我的意愿设置它们的位置?怎么样?如果没有答案,我可能只需创建一个DataGrid并用我的LoadRecords返回对象填充它,但拥有这些组件真的很棒。谢谢你的到来。

编辑:以下是我想要做的图片:enter image description here

这是我用于“快速”菜单的设计,显示了您最近的3次购买。但它们是静态的,我只是用信息“喂”它们。我想做一个更大的规模,动态创建每个组件并在屏幕上设置它的位置,如前所述。

2 个答案:

答案 0 :(得分:2)

我认为您可以使用ListView控件激活它。您需要设置样式和UI格式,但这将是最好的。它也提供滚动功能。

  <Window x:Class="WpfTutorialSamples.ListView_control.ListViewItemTemplateSample"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="ListViewItemTemplateSample" Height="150" Width="350">
<Grid>
            <ListView Margin="10" Name="lvProducts">
                    <ListView.ItemTemplate>
                            <DataTemplate>
                                    <WrapPanel>

                                            <TextBlock Text="{Binding Name}" FontWeight="Bold" />
                                            <TextBlock Text=", " />

                                            <TextBlock Text="{Binding Price}" FontWeight="Bold" />
                                            <TextBlock Text=" (" />
                                            <TextBlock Text="{Binding Date}" TextDecorations="Underline" Foreground="Blue"  />
                                            <TextBlock Text=")" />
                                    </WrapPanel>
                            </DataTemplate>
                    </ListView.ItemTemplate>
            </ListView>
    </Grid>

答案 1 :(得分:0)

您可以创建自定义用户控件。 [对于Visual Studio 2015]转到

  • Visual C#=&gt; Windows =&gt;经典桌面并选择WPF用户控件 图书馆。
  • 添加您希望在自定义控件中使用的控件。我添加了一个文本框和一个按钮。

创建在创建控件后可以访问的属性。要访问任何组件的事件,请声明事件并将事件处理程序添加到构造函数中的事件。

public partial class UserControl1:UserControl     {         public string SearchTextBoxText         {             get {return SearchTextBox.Text; }             设置{SearchTextBox.Text = value; }         }

    public object SearchButtonContent
    {
        get { return SearchButton.Content; }
        set { SearchButton.Content = value; }
    }

    public event RoutedEventHandler SearchButton_Clicked;

    public UserControl1()
    {
        InitializeComponent();
     SearchButton_Clicked += SearchButton_Click;
    }

    private void SearchButton_Click(object sender, RoutedEventArgs e)
    {
        if (SearchButton_Clicked != null)
        {
            SearchButton_Clicked(sender, e);
        }
    }
}  

现在构建解决方案 PS:UserControl项目必须与您的应用程序项目位于同一解决方案中 现在在您的应用程序中添加对该项目的引用,您可以使用此自定义控件