我的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;
}
答案 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}}(绑定)ListBox
,ItemTemplate
确定所有数据的显示方式。通常,这将由ObservableCollection
而不是List
完成。
<ListBox ItemsSource="{Binding DatabaseObjects}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding No}"/>
<TextBlock Text="{Binding Date"/>
...
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>