从主程序和填充列表框中调用select方法

时间:2014-09-17 16:06:04

标签: c# mysql xaml

我的XAML应用程序当前调用dbObject.Select();方法,然后运行SQL select语句。

我现在面临的困难是将此信息输出到DriverListBox,这是我在UI上的列表框字段。我如何从MainWindow做到这一点?

MainWindow.xaml.cs

  public MainWindow()
    {
        InitializeComponent();
        var dbObject = new DbConnect();
        dbObject.OpenConnection();
        dbObject.Select();
    }

DbConnect.cs

    public List<string>[] Select()
    {
        const string query = "SELECT * from rent";

        // Create a list to store the result
        var list = new List<string>[4];
        list[0] = new List<string>();
        list[1] = new List<string>();
        list[2] = new List<string>();
        list[3] = new List<string>();

        // Create command
        var cmd = new MySqlCommand(query, _connection);
        MySqlDataReader dataReader = cmd.ExecuteReader();

        // Read the data and store it in a list
        while (dataReader.Read())
        {
            list[0].Add(dataReader["dNo"] + "");
            list[1].Add(dataReader["pDate"] + "");
            list[2].Add(dataReader["pRent"] + "");
            list[3].Add(dataReader["status"] + "");
        }

        // Close
        dataReader.Close();
        CloseConnection();

        // Return list
        return list;
    }

1 个答案:

答案 0 :(得分:1)

执行此操作的正确方法不是选择一堆List<String>,而是选择进入DTO( D ata T 传输 O 对象)。然后,您将保留以下列表:

    DatabaseObjects = new List<MyDataObject>();

    // Create command
    var cmd = new MySqlCommand(query, _connection);
    MySqlDataReader dataReader = cmd.ExecuteReader();

    // Read the data and store it in a list
    while (dataReader.Read())
    {
        MyDataObject newRow = new MyDataObject();
        newRow.No = (dataReader["dNo"] + "");
        newRow.Date = (dataReader["pDate"] + "");
        newRow.Rent = (dataReader["pRent"] + "");
        newRow.Status = (dataReader["status"] + "");
        list.Add(newRow);
    }

然后,您可以将此列表用作ItemsSource的{​​{1}}(绑定)ListBoxItemTemplate确定所有数据的显示方式。通常,这将由ObservableCollection而不是List完成。

<ListBox ItemsSource="{Binding DatabaseObjects}">
   <ListBox.ItemTemplate>
       <DataTemplate>
           <StackPanel>
               <TextBlock Text="{Binding No}"/>
               <TextBlock Text="{Binding Date"/>
               ...
           </StackPanel>
       </DataTemplate>
   </ListBox.ItemTemplate>
</ListBox>