【问题标题】:WPF DataGrid - MS Access Table - Column headings display but not data is pulledWPF DataGrid - MS Access 表 - 显示列标题但未提取数据
【发布时间】:2021-07-16 21:52:42
【问题描述】:

我按照这里找到的信息进行操作

https://docs.microsoft.com/en-us/dotnet/desktop/wpf/controls/walkthrough-display-data-from-a-sql-server-database-in-a-datagrid-control?view=netframeworkdesktop-4.8

本文是使用 SQL Server 作为源,但我使用的是 Access accdb。这似乎是引用拉取数据的最直接的文章。我对 WPF/C# 很陌生,但我正在努力学习,因为我认为我现在可以为 Access 中内置的工具构建一个更好的界面,因为有更多的 UI 选项,我想在我知道的 VBA 之外扩展一点很好,但不是一种理想的语言。

无论如何,我认为下面是相关代码。如果我在设计器中预览数据集,我可以看到它确实将数据拉回一个控件,该控件本身就是一个数据网格,并且它提到了这个 Fill,GetData() 所以也许我应该在某个地方调用它。

如果我能弄清楚我将在哪里/如何回答我自己的问题并关闭它。

XAML:

<DataGrid Name="processScheduleGrid" />

C#:

var query = from ps in dataSet.PROCESS_SCHEDULES                        
                        orderby ps.SCHEDULE_NAME
                        select new { ps.SCHEDULE_NAME, ps.PROCESS_NAME, ps.DAY_OF_MONTH, ps.DAY_OF_WEEK, ps.START_TIME, ps.END_TIME, ps.STATUS, ps.STATUS_TM, ps.PARALLEL, ps.MINUTES_BEFORE_REPEAT, ps.ENABLED, ps.ERR_NUM };
            
            processScheduleGrid.ItemsSource = query.ToList();  

【问题讨论】:

  • 您确定您的查询实际上返回了任何记录吗?
  • 是的,查询返回记录。
  • 我尝试添加它来用数据填充数据集表,它似乎至少让我找到了某个地方,MICRO_BEDataSetTableAdapters.PROCESS_SCHEDULESTableAdapter processSchedulesTableAdapter = new MICRO_BEDataSetTableAdapters.PROCESS_SCHEDULESTableAdapter(); processSchedulesTableAdapter.Fill(dataSet.PROCESS_SCHEDULES);
  • 我现在的问题是我在数据为空的每一列上都出现异常,并且异常是预先生成的。我只是希望它在任何内容为空时使用空字符串,但我想我将不得不更正它预先生成的所有内容的代码。如果我(还)不喜欢 C# 的一件事……所有这些预生成的代码实际上使它变得更加混乱,因为虽然我可以理解其中的一些,但它生成的很多东西对我没有任何意义还没有。

标签: c# wpf datagrid


【解决方案1】:

我能够使用另一个对象模型来实现这一点,这看起来对我来说更熟悉,因为我习惯于使用 DAO 和 ADO 进行访问。和后者比较相似

修改后的代码要简单得多,并且它不会执行任何我在学习更多使用 C# 和 Visual Studio 时真正不喜欢的自动生成。我想如果我浏览了每一列并添加了对空值的处理,我本可以完成上述工作,但是这段代码可以毫无问题地处理它,所以这似乎是与其他对象模型(System.Windows)相比的正确方法.Data vs System.Data/System.Data.OleDb) 和语法。

 OleDbConnection con = new OleDbConnection(provider);
            OleDbCommand cmd = new OleDbCommand(sql, con);
            con.Open();
            cmd.CommandType = System.Data.CommandType.Text;
            OleDbDataAdapter da = new OleDbDataAdapter(cmd);
            DataSet ds = new DataSet();
            da.Fill(ds, "PROCESS_SCHEDULES");
            processScheduleGrid.ItemsSource = ds.Tables["PROCESS_SCHEDULES"].DefaultView;

【讨论】:

    猜你喜欢
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多