繁体   English   中英

如何基于日期范围添加listView项目?

[英]How to add listView item base on date range?

我在做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);
        }
    }

我建议您看一下: 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>

当然,它需要进行一些调整,直到看起来完全像您想要的那样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM