【问题标题】:DataGrid copy to clipboard DateTime format issueDataGrid 复制到剪贴板 DateTime 格式问题
【发布时间】:2017-12-01 13:11:19
【问题描述】:

我在 WPF 中有一个数据网格,我正在通过数据表填充 SQL 查询结果。但是,当我将网格复制到剪贴板时,它总是以完整的日期/时间格式复制。这是我正在做的事情:

我有一条 SQL 语句从数据库中读取一些数据,包括日期字段:

searchProDateSQLCMD.CommandText = "select pName, convert(date, pDate), FROM [Professionals] WHERE pName = @parName"

我用结果填充一个数据表:

dTableAdpater = new SqlDataAdapter(searchProDateSQLCMD);
dTable = new DataTable("Professionals");
dTableAdpater.Fill(dTable);

然后我为网格设置列以显示信息:

DataGridTextColumn jDateCl = new DataGridTextColumn();
pDateCl.Binding = new Binding("pDate");

pDateCl.Binding.StringFormat = "{0:d}";

然后我将网格与我创建的列绑定

SearchResultGrid.Columns.Add(pDateCl);

当我尝试复制该列时:

SearchResultGrid.SelectAllCells();
SearchResultGrid.ClipboardCopyMode = DataGridClipboardCopyMode.IncludeHeader;

我复制了时间;但是时间格式是(dd/MM/yyyy 12:00:00 AM),即使我在SQL中使用convert(),在列中使用{0:d}

我做错了什么?没有时间,我只是在副本上获取日期,我错过了什么?

【问题讨论】:

    标签: c# wpf datatable datagrid


    【解决方案1】:

    很遗憾,这是当前DataGrid 的实现限制。

    正如您在reference sources 中看到的,DataGrid 使用简单的ToString() 调用将单元格的内容呈现到剪贴板,而不提供任何格式。此调用将使用CultureInfo.CurrentCultureDateTime 的默认格式,因此您会得到结果。

    所以你至少有两个选择:

    • 将主线程的CultureInfo 设置为所需的日期/时间格式。请注意,这将影响对任何 DateTime 对象的所有 ToString() 调用,因此可能不适合您。

    • 不要使用DateTime 列,而是使用string 列并在服务器端进行转换。然而,这不是一个好方法,因为您失去了 DateTime 类型的所有好处。

    【讨论】:

    • 我将列转换为字符串。
    猜你喜欢
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多