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