0

我一直在用头撞墙一段时间。我正在尝试使用 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

现在我需要用给定的用户 ID(0456)拿出一周(5/12 - 5/18)的所有拳头。然后我需要将这些值粘贴到设置为一周中的 7 天的数据网格中。因此,在每一天下,它都会列出所有的出拳(打卡、突破等)及其相关时间。

编辑: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>

然后对于后面的代码,这就是我能找到的关于如何填充 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 的新手。也许我什至不应该为此使用数据网格。谢谢迈克

4

2 回答 2

2

您可以使用绑定到您的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,这是一种常见的模式。视图模型包含实际数据,但可以选择修改以更好地显示在视图中(此处为 your DataGrid)。如果您进行一些研究,您会注意到,主要是视图模型实现INotifyPropertyChanged了更改跟踪。如果您想在用户修改DataGrid.

于 2013-05-14T19:31:29.717 回答
0

你可以使用 ListView - GridView

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

在您的代码中,您将创建一个属性(或者您喜欢这样做),IEnumerable您可以使用它进行数据绑定。否则,您可以设置Datasource网格的属性。

于 2013-05-14T19:11:21.987 回答