我根据日期范围做wpf一些生成列。我怎么能设法根据我的sqlite数据(shiftdate)获取数据并动态地将项目添加到列表视图?
我想要这样的事情:
使用sqlite查看器获取我的Sqlite数据:
到目前为止,我的代码仅在第一列中有效;
在我的XAML中
<Window x:Class="SaranacHUD.AdminFeedback"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:SaranacHUD"
DataContext="{Binding RelativeSource={RelativeSource Self}}"
Title="Feedback" Height="800" Width="1200" WindowStartupLocation="CenterScreen" Topmost="True">
<Window.Resources>
<local:ViewModel x:Key="ViewModel" />
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="HorizontalContentAlignment" Value="Center"/>
</Style>
</Window.Resources>
<Grid DataContext="{StaticResource ViewModel}">
<ListView Name="listView1" Margin="10,42,10,10" ItemsSource="{Binding CollectionAccount}" IsSynchronizedWithCurrentItem="True">
<ListView.View>
<GridView x:Name="gridViewAll">
</GridView>
</ListView.View>
</ListView>
<DatePicker Name="DatePicker1" HorizontalAlignment="Left" Height="27" Margin="10,10,0,0" VerticalAlignment="Top" Width="106"/>
<DatePicker Name="DatePicker2" Height="27" Margin="151,10,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" Width="113"/>
<Button Name="buttonGenerate" Content="Generate" Height="30" Margin="269,7,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" Width="156"/>
<Label Content="TO" HorizontalAlignment="Left" Margin="121,10,0,0" VerticalAlignment="Top" Height="30"/>
</Grid>
代码背后:
public partial class AdminFeedback : Window
{
ViewModel _ViewModel = null;
string year1;
string month1;
string day1;
string year2;
string month2;
string day2;
public AdminFeedback()
{
InitializeComponent();
_ViewModel = Resources["ViewModel"] as ViewModel;
Loaded += (Ev, ev) =>
{
DatePicker1.SelectedDate = DateTime.Today;
DatePicker2.SelectedDate = DateTime.Today;
};
DatePicker1.SelectedDateChanged += (Ev, ev) =>
{
year1 = DatePicker1.SelectedDate.Value.ToString("yyyy");
month1 = DatePicker1.SelectedDate.Value.ToString("MM");
day1 = DatePicker1.SelectedDate.Value.ToString("dd");
};
DatePicker2.SelectedDateChanged += (Ev, ev) =>
{
year2 = DatePicker2.SelectedDate.Value.ToString("yyyy");
month2 = DatePicker2.SelectedDate.Value.ToString("MM");
day2 = DatePicker2.SelectedDate.Value.ToString("dd");
};
buttonGenerate.Click += (Ev, ev) =>
{
CreateColumns();
};
}
private void CreateColumns()
{
gridViewAll.Columns.Clear();
GridViewColumn UserName = new GridViewColumn();
UserName.Header = "UserName";
UserName.Width = 150;
UserName.DisplayMemberBinding = new Binding("UserName");
gridViewAll.Columns.Add(UserName);
var startDate = new DateTime(int.Parse(year1), int.Parse(month1), int.Parse(day1));
var endDate = new DateTime(int.Parse(year2), int.Parse(month2), int.Parse(day2));
var tmp = startDate;
while (tmp <= endDate)
{
GridViewColumn _gridViewColumn = new GridViewColumn();
_gridViewColumn.Header = tmp.ToString("MM/dd");
_gridViewColumn.Width = 50;
_gridViewColumn.DisplayMemberBinding = new Binding("GridViewColumn");
gridViewAll.Columns.Add(_gridViewColumn);
tmp = tmp.AddDays(1);
}
_ViewModel.FillFeedback();
}
}
在我的ViewModel
中public void FillFeedback()
{
sqliteConMain.connection.Close();
sqliteConMain.connection.Open();
var _command = sqliteConMain.connection.CreateCommand();
var query = string.Format("SELECT * FROM tblUser Where Site = '" + "1880" + "' COLLATE NOCASE");
string commandText = query;
var _dataAdapter = new SQLiteDataAdapter(commandText, sqliteConMain.connection);
DataSet _dataSet = new DataSet();
DataTable _dataTable = new DataTable();
_dataSet.Reset();
_dataAdapter.Fill(_dataSet);
sqliteConMain.connection.Close();
_dataTable = _dataSet.Tables[0];
var rows = _dataTable.Rows;
CollectionAccount.Clear();
foreach (DataRow row in rows)
{
var userName = row.ItemArray[0] as string;
string teamNumber = row.ItemArray[1] as string;
string groupName = row.ItemArray[2] as string;
string site = row.ItemArray[3] as string;
string switchRole = row.ItemArray[4] as string;
var UserDataProperties = new UserDataProperties
{
UserName = userName,
TeamNumber = teamNumber,
GroupName = groupName,
};
_collectionAccount.Add(UserDataProperties);
}
}
答案 0 :(得分:0)
我建议你看一下:ListView DataBinding
如页面末尾所述,您需要创建一个项目模板,以正确显示collectionAccout中的信息。该视图如何知道如何呈现UserDataProperties?
尝试这样的事情:
<ListView.ItemTemplate>
<DataTemplate>
<WrapPanel>
<TextBlock Text="UserDataProperties: " />
<TextBlock Text="{Binding UserName}" />
<TextBlock Text="{Binding Teamnumber}" />
<TextBlock Text="{Binding GroupName}" />
</WrapPanel>
</DataTemplate>
</ListView.ItemTemplate>
当然它需要一些调整,直到它看起来完全像你想要的那样。