我有一组"动态数据",我需要绑定到GridControl.到目前为止,我一直在使用标准的DataTable类,它是System.Data命名空间的一部分.这工作得很好,但我被告知我不能使用它,因为它对于客户端和服务器之间的网络序列化太重了.
所以我认为我可以通过简单地使用List<Dictionary<string, object>>List表示行集合的类型来轻松复制DataTable类的"简化"版本,并且每个Dictionary表示一行,其中列名称和值为KeyValuePair类型.我可以设置Grid以使列DataField属性与Dictionary中的键匹配(就像我为DataTable的列名所做的那样).
但是做完之后
gridControl.DataSource = table;
gridControl.RefreshDataSource();
Run Code Online (Sandbox Code Playgroud)
网格没有数据......
我想我需要实施IEnumerator- 对此的任何帮助都将不胜感激!
示例调用代码如下所示:
var table = new List<Dictionary<string,object>>();
var row = new Dictionary<string, object>
{
{"Field1", "Data1"},
{"Field2", "Data2"},
{"Field3", "Data3"}
};
table.Add(row);
gridControl1.DataSource = table;
gridControl1.RefreshDataSource();
Run Code Online (Sandbox Code Playgroud) 我有一种情况,我想做一些类似于ASP.NET MVC 3 ViewBag对象的内容,其中属性是在运行时创建的?还是在编译时?
无论如何,我想知道如何用这种行为创建一个对象?
我可能想要太多,但我的情景是
public dynamic CreateConfigObject(JobConfigurationModel config) {
dynamic configObject = new { };
configObject.Git = new GitCheckout {
Repository = config.Github.Url
};
return configObject;
}
Run Code Online (Sandbox Code Playgroud)
当然,它失败了,configObject.Git因为这个属性不存在.我希望能够在运行时添加任意数量的属性,而不需要预先知道属性的数量和名称;
这种情况在C#中是否可能,或者我的JavaScript想象力开始伤害我?:)
在我的课上,我有像这样的私有变量和属性.
private string _itemCOde=string.Empty;
private string _itemName=string.Empty;
public string ItemCode
{
get { return _itemCode; }
set { _itemCode = value == null ? value : value.Trim();}
}
public string ItemName
{
get { return _itemName; }
set { _itemName = value == null ? value : value.Trim();}
}
Run Code Online (Sandbox Code Playgroud)
根据这个属性,我在从sql表中选择数据后创建Item对象.
现在,如果数据库表被更改并添加一个名为cost的新列,那么我必须向该类添加另一个属性.在不向类添加新属性的情况下,可以根据表字段动态声明属性.
我想加载一个属性文件(它是一个.csv文件,每行都有一个名称和相关的数值),然后访问这些属性值,如下所示:FileLoader.PropertyOne或FileLoader.PropertyTwo.问题是我不想为每个值写一个属性,我希望它们是从文件生成的.所以
public class FileLoader
{
public int Property1 { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)
不是我想要的.这可能吗?我看不到任何方法,因为显然编译器不会知道属性名称.也许类似的东西?
我有一个Dictionary<int, object> 在int是的属性obj.有没有更好的数据结构?我觉得使用属性是关键是多余的.
这Dictionary<int, obj>是容器类中的一个字段,允许obj根据intid号随机索引值.容器类中的简化(无异常处理)索引器如下所示:
obj this[int id]
{
get{ return this.myDictionary[id];}
}
Run Code Online (Sandbox Code Playgroud)
myDictionary前面Dictionary<int, obj>拿着物体在哪里.
这可能是快速随机访问的典型方式,但我想获得第二意见.
我有这样的课程设置:
public class Summary
{
public Geometry geometry { get; set; }
public SummaryAttributes attributes { get; set; }
}
public class SummaryAttributes
{
public int SERIAL_NO { get; set; }
public string District { get; set; }
}
public class Geometry
{
public List<List<List<double>>> paths { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我为该对象获取一个json记录字符串,并将其放入其中,如下所示:
List<Summary> oFeatures = reportObject.layers[0].features.ToObject<List<Summary>>();
Run Code Online (Sandbox Code Playgroud)
我的最终目标是创建一个csv文件,因此我需要一个平整的记录列表才能发送给我拥有的csv编写器。我可以做这个:
List<SummaryAttributes> oAtts = oFeatures.Select(x => x.attributes).ToList();
Run Code Online (Sandbox Code Playgroud)
我得到了一个不错的属性列表,并将其发送到csv。十分简单。
我想要的还是从Geometry对象中提取一个字段,并将其包含在我的最终List中以转到csv。所以最终名单要到CSV作家将包含对象的所有从SummaryAttributes字段加几何对象上的第一个和最后双重价值从路径字段(路径[0] [0] [首页]和路径[0] [0] [最后]
很难解释。我想将两个额外的属性嫁接到原始的SummaryAttributes对象上。如果需要的话,可以用两个额外的字段创建一个新的SummaryAttributesXY类。但是,我试图避免创建一个新的匿名对象,并且必须对SummaryAttributes类中的每个字段进行定界,因为该示例中列出的内容比我要列举的更多。
有什么建议么?
我有X个RadioButtons(Silverlight).通常这个值在2-5之间.称之为"开关".每个单选按钮都绑定到该类的属性.
示例属性看起来像
private bool _radio1;
public bool Radio1{
set{
_radio1 = value;
_radioX = !value; // make all others false
}
get{ return _radio1 }
}
Run Code Online (Sandbox Code Playgroud)
基本思想是,如果选择一个无线电,则关闭所有其他无线电.
我尝试过使用其他方法,与使用模板创建列表相比,这个方法似乎最简单(特别是在某些情况下我有其他按钮涉及无线电)
目前我有两个要求,我需要一个具有2个属性的类(例如,男性/女性)复选框和3个属性.
未来可能会有更多,因此为什么我认为为X量的单选按钮编写一个新类是愚蠢的.
有没有以某种方式使多个属性动态?我看到了一些字典方法.
我看到了这种方法 如何在C#中创建动态属性?
我不知道如何绑定它.
我搜索谷歌但结果却是误会.
这是一个代码流程:
public class Store
{
public dynamic GetList(List<string> propertyFields)
{
// Body here
// for in list propertyFields. Such as: ["Code", "Name", "Address", ...]
// dynamic result = ...
// result.Code = "value", result.Name = "abc", result.Address = "homeless", result.... = "..."
// return result
}
}
Run Code Online (Sandbox Code Playgroud)
方法返回一个动态对象.
propertyFields是字段名称列表.当我在列表中传递4个字符串时,dynamic有4个属性字段值(稍后).
当我调用这个方法时:
Store store = new Store();
var rs = store.GetList(["Code","Name","Address"])
Console.WriteLine(rs[0].Code)
Run Code Online (Sandbox Code Playgroud)
这是我的观点.
我的问题:是否有可能在C#中做到这一点?
c# ×11
dynamic ×4
data-binding ×2
.net ×1
.net-4.0 ×1
asp.net-4.0 ×1
binding ×1
class ×1
idictionary ×1
lambda ×1
linq ×1
properties ×1
reflection ×1
silverlight ×1
viewbag ×1
winforms ×1