c# - 从主程序调用选择方法并填充列表框

标签 c# mysql xaml

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

我现在面临的困难是将此信息输出到 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;
    }

最佳答案

正确的做法是不要选择一堆 List<String> ,但要选择一个 DTO(D 数据 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 (绑定(bind))你的ListBoxItemTemplate这决定了所有数据的显示方式。通常这将由 ObservableCollection 完成而不是 List .

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

关于c# - 从主程序调用选择方法并填充列表框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25895375/

相关文章:

C# WebBrowser DocumentCompleted 事件未在特定站点上触发

c# - Decimal.Parse 抛出 FormatException

从 mysql 工作台创建表时出现 MySQL 150 错误(外键选项与列中的非空值冲突,已修复)

c# - AvalonDock2 : LayoutItemTemplate only for documents

c# - 如何在 UWP 中创建对话气泡?

C# WPF - 拖动并单击

c# - DataContract 在 WCF 客户端服务引用中不可用

c# 一对多字符串解析帮助使用正则表达式 lambda

php - 以本地时间显示 MySQL 时间戳

MYSQL,包括空结果