如何使用C#填充WPF数据网格,但不能直接从数据库中填充

本文关键字:填充 但不能 数据库 网格 何使用 WPF 数据 数据网 | 更新日期: 2023-09-27 18:13:48

我已经用头撞墙一段时间了。我正在尝试使用C#.net从mysql数据库中填充WPF数据网格。问题是,在将数据粘贴到数据网格之前,我需要修改数据,因为数据的格式不正确。在搜索时,我能找到的唯一例子是如何自动将查询中的数据直接粘贴到数据库中。

以下是mysql中我当前的表。

1   0456    clockin         5/14/2013 8:36:26 AM
2   0456    breakout    5/14/2013 8:36:39 AM
3   0456    breakin     5/14/2013 8:36:40 AM
4   0456    clockout    5/14/2013 8:36:41 AM
5   0456    clockin         5/14/2013 8:37:14 AM
6   0456    breakout    5/14/2013 8:50:27 AM
7   0456    breakin     5/14/2013 8:50:34 AM

现在,我需要用给定的userID(0456(去掉本周(5/12-5/18(的所有拳头。然后,我需要将这些值粘贴到一个数据网格中,该网格是用一周中的七天来设置的。因此,在每一天下,它都会列出所有的拳击(打卡、突破等(及其相关时间。

编辑:tnw要求提供代码。这是我的数据网格XML:

<DataGrid AutoGenerateColumns="False" Height="253" HorizontalAlignment="Center" Margin="219,208,0,0" Name="weekHours" VerticalAlignment="Top" Width="556" HorizontalContentAlignment="Center" CanUserAddRows="True" CanUserReorderColumns="False" CanUserResizeColumns="False" CanUserResizeRows="False" CanUserSortColumns="False" Focusable="False">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Action" Width="100"/>
            <DataGridTextColumn Header="Sun" Width="65"/>
            <DataGridTextColumn Header="Mon" Width="65"/>
            <DataGridTextColumn Header="Tue" Width="65"/>
            <DataGridTextColumn Header="Wed" Width="65"/>
            <DataGridTextColumn Header="Thu" Width="65"/>
            <DataGridTextColumn Header="Fri" Width="65"/>
            <DataGridTextColumn Header="Sat" Width="65"/>
        </DataGrid.Columns>
    </DataGrid>

对于后面的代码,这就是我所能找到的关于如何填充数据网格的全部内容。

public void FillDataGrid(String query, DataGrid dg)
    {
        //Open connection
        if (this.OpenConnection() == true)
        {
            //Create Command
            MySqlCommand cmd = new MySqlCommand(query, connection);
            DataTable dt = new DataTable();
            MySqlDataAdapter da = new MySqlDataAdapter(cmd);
            da.Fill(dt);
            dg.DataContext = dt;
        }
    }

任何帮助都将不胜感激。我是C#和.net的新手。也许我甚至不应该为此使用数据网格。谢谢Mike

如何使用C#填充WPF数据网格,但不能直接从数据库中填充

您可以使用绑定到DataGrid的视图模型。从数据库加载数据后,遍历记录并创建视图模型。以下片段展示了如何解决问题的方法:

MyViewModel.cs:

 public class MyViewModel
 {
      public DateTime Date { get; set; }
      public int Punches { get; set; }
      public int UserId { get; set; }
 }

在这里,您将数据绑定到DataGrid:

 var viewModels = new List<MyViewModel>();
 foreach(var item in dt.Rows)
 {
      var vm = new MyViewModel();
      vm.UserId = item["UserId"];
      vm.Punches = item["Punches"];
      vm.Date = DateTime.Parse(item["Date"]);
      //....
      viewModels.Add(vm);
 }
 dg.DataContext = viewModels;

如果您使用WPF,也许使用MVVM,这是一种常见的模式。视图模型包含实际数据,但可以进行修改以更好地显示在视图中(此处为DataGrid(。如果你做一些研究,你会注意到,大多数视图模型实现了INotifyPropertyChanged用于更改跟踪。如果您希望在用户修改DataGrid中的某些内容时做出反应,那么您的视图模型也可以实现此接口。

您可以使用ListView-GridView

<ListView ItemsSource="{Binding YourData}">
    <ListView.View>
        <GridView>
            <!-- The columns here -->
        </GridView>
    </ListView.View>
</ListView>

在您的代码中,您将创建一个属性(或者根据您的意愿(,即IEnumerable,您可以使用它进行数据绑定。否则,您可以设置网格的Datasource属性。

相关文章: