gpt4 book ai didi

c# - 如何从绑定(bind)到 List 或匿名类型的绑定(bind)源中获取正确的映射名称以用于 DataGridTableStyle?

转载 作者:可可西里 更新时间:2023-11-01 03:13:29 24 4
gpt4 key购买 nike

我正在尝试创建一个 DataGridTableStyle 对象,以便我可以控制 DataGrid 的列宽。我创建了一个绑定(bind)到列表的 BindingSource 对象。实际上,它绑定(bind)到通过 Linq 以下列方式创建的匿名类型列表(为了清楚我正在做的事情而更改了变量名称):

List<myType> myList = new List<myType>(someCapacity);
.
...populate the list with query from database...
.

var query = from i in myList
select new
{
i.FieldA,
i.FieldB,
i.FieldC
};

myBindingSource.DataSource = query;
myDataGrid.DataSource = myBindingSource;

然后我创建一个 DataGridTableStyle 对象并将其添加到数据网格中。但是,它从不应用我设置的表格样式属性,因为我似乎无法设置正确的 myDataGridTableStyle.MappingName 属性。

我在 Google 上搜索了大约 1/2 小时,并在一堆不同的论坛中不断看到指向同一个问题的链接(字面意思是相同的文本,就像有人刚刚复制并粘贴了问题......我讨厌那样。 ..).无论如何,这些建议都没有用,就像那个人在所有其他网站上所说的那样。

所以这里有人知道我需要将 MappingName 属性设置为什么才能让我的 TableStyle 正常工作吗?我可以从哪里获取名称? (它不能为空...仅适用于绑定(bind)到 DataTable 或 SqlCeResultSet 等的 BindingSource)。

我认为这可能是我使用 Linq 创建一个匿名的、更专业的对象版本且仅包含我需要的字段的问题。我是否应该尝试将 BindingSource 直接绑定(bind)到 List 对象?或者甚至可以将 DataGrid 直接绑定(bind)到 List 对象并完全跳过绑定(bind)源。

谢谢

PS - C#,Compact Framework v3.5

更新:

我在下面发布了一个解决我的问题的答案。不管它是否是最好的方法,它确实奏效了。如果您遇到与我相同的问题,值得一看。

最佳答案

我找到了完成这项工作的方法。我会把它分成几个部分...


List<myType> myList = new List<myType>(someCapacity);
.
...populate the list with query from database...
.

DataGridTableStyle myDataGridTableStyle = new DatGridtTableStyle();
DataGridTextBoxColumn colA = new DataGridTextBoxColumn();
DataGridTextBoxColumn colB = new DataGridTextBoxColumn();
DataGridTextBoxColumn colC = new DataGridTextBoxColumn();

colA.MappingName = "FieldA";
colA.HeaderText = "Field A";
colA.Width = 50; // or whatever;

colB.MappingName = "FieldB";
.
... etc. (lather, rinse, repeat for each column I want)
.

myDataGridTableStyle.GridColumnStyles.Add(colA);
myDataGridTableStyle.GridColumnStyles.Add(colB);
myDataGridTableStyle.GridColumnStyles.Add(colC);

var query = from i in myList
select new
{
i.FieldA,
i.FieldB,
i.FieldC
};

myBindingSource.DataSource = query.ToList(); // Thanks Marc Gravell

// wasn't sure what else to pass in here, but null worked.
myDataGridTableStyle.MappingName = myBindingSource.GetListName(null);

myDataGrid.TableStyles.Clear(); // Recommended on MSDN in the code examples.
myDataGrid.TablesStyles.Add(myDataGridTableStyle);
myDataGrid.DataSource = myBindingSource;

基本上,DataGridTableStyle.MappingName 需要知道它映射到的对象类型。由于我的对象是匿名类型(使用 Linq 创建),所以直到运行时我才知道它是什么。将匿名类型的列表绑定(bind)到绑定(bind)源后,我可以使用 BindingSource.GetListName(null) 获取匿名类型的字符串表示形式。

有一点需要注意。如果我只是将 myList(类型为“myType”)直接绑定(bind)到绑定(bind)源,我可以只使用字符串“myType”作为 DataGridTableStyle.MappingName 的值。

希望这对其他人有用!

关于c# - 如何从绑定(bind)到 List<T> 或匿名类型的绑定(bind)源中获取正确的映射名称以用于 DataGridTableStyle?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/420386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com