0

我正在使用 LINQ to SQL 和 DataGridViews 创建数据库的可编辑用户界面。
我的问题是从数据库中获取结果时我必须翻译列名,因为虽然数据库中的所有名称都是英文(Visual Studio 类设计器支持的唯一语言),但我必须以不同的语言显示它们...

所以我想到了使用匿名类型:

c_dgvShops.DataSource = (from Shop s in DataContext.Shops
                                 select new
                                     {
                                         Azonosito = s.Shop_ID,
                                         Nev = s.Name,
                                         Megye = s.County,
                                         Iranyitoszam = s.Zipcode,
                                         Cim = s.Address,
                                         Latogatasok_szama = s.Visits.Count
                                     });

(请注意,匿名类型的属性名称是匈牙利语[我必须显示的语言],翻译自英语。)

这导致 DataGridViews 是只读的。
我做了一些谷歌搜索,发现了这个: http: //blogs.msdn.com/swiss_dpe_team/archive/2008/01/25/using-your-own-defined-type-in​​-a-linq-query-expression。 .aspx _
根据这篇文章,我创建了一个名为“Bolt”(Shop 的匈牙利语等价物)的新类,并用翻译后的属性名称填充它,因此查询变为:

c_dgvShops.DataSource = (from Shop s in DataContext.Shops
                                 select new Bolt
                                     {
                                        Azonosito = s.Shop_ID,
                                        Nev = s.Name,
                                        Megye = s.County,
                                        Iranyitoszam = s.Zipcode,
                                        Cim = s.Address,
                                        Latogatasok_szama = s.Visits.Count()
                                     });

虽然对我来说并不完全清楚,但这如何使编辑 DataGridView 中显示的数据成为可能,我试了一下,得到了一个异常:

NotSupportedException:不允许在查询中显式构造实体类型“DataTest_L2SQL.Bolt”。

那么这样做的正确方法是什么?如何显示别名列名称,但仍保持数据可编辑?

非常感谢您!

4

2 回答 2

2

您应该手动定义数据网格列(这将允许您将其标题设置为您想要的任何内容以及自定义大小和显示格式),而不是依赖数据网格通过数据源发现您的列 - 此功能仅意味着快速和肮脏的设置。

于 2009-08-24T13:20:54.650 回答
0

你正在以错误的方式去做。您不应该使用不同的类属性名称进行本地化。

按照本指南本地化您的页面。为列指定 HeaderText,更改表单语言,然后为语言重新指定 HeaderText。

于 2009-08-24T13:14:41.023 回答