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

本文关键字:填充 列表 方法 主程序 调用 select | 更新日期: 2023-09-27 18:22:24

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

我现在面临的困难是将这些信息输出到DriverListBox,这是我在UI上的一个列表框字段。如何从主窗口执行此操作?

主窗口.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;
    }

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

正确的方法不是选择一堆List<String>,而是选择一个DTO(DataTtransferO对象)。然后你拿着一张清单:

    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);
    }

然后使用此列表作为ListBoxItemsSource(绑定),ItemTemplate决定如何显示所有数据。通常,这将由ObservableCollection而不是List来完成。

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