我在WinForms应用程序上有一个组合框,其中可以选择一个项目,但它不是必需的.因此,我需要一个'Empty'第一项来表示没有设置任何值.
组合框绑定到从存储过程返回的DataTable(我没有在我的UI控件上为匈牙利表示法道歉:p):
DataTable hierarchies = _database.GetAvailableHierarchies(cmbDataDefinition.SelectedValue.ToString()).Copy();//Calls SP
cmbHierarchies.DataSource = hierarchies;
cmbHierarchies.ValueMember = "guid";
cmbHierarchies.DisplayMember = "ObjectLogicalName";
Run Code Online (Sandbox Code Playgroud)
我怎么能插入这样一个空项目?
我有权更改SP,但我真的不想用UI逻辑"污染"它.
更新:这是我已经空白的DataTable.NewRow(),谢谢.我已经对你进行了修改(无论如何都是3个答案).在决定'回答'之前,我试图让迭代器模式工作
更新:我认为这个编辑让我进入了社区Wiki的土地,我决定不指定单个答案,因为它们都有其领域背景的优点.感谢您的集体投入.
我试图通过类属性上的属性构建一个对象,该属性指定提供的数据行中的列是属性的值,如下所示:
[StoredDataValue("guid")]
public string Guid { get; protected set; }
[StoredDataValue("PrograGuid")]
public string ProgramGuid { get; protected set; }
Run Code Online (Sandbox Code Playgroud)
在基础对象的Build()方法中,我将这些属性的属性值设置为
MemberInfo info = GetType();
object[] properties = info.GetCustomAttributes(true);
Run Code Online (Sandbox Code Playgroud)
但是,在这一点上,我意识到我的知识有限.
首先,我似乎没有找回正确的属性.
现在我有了属性,我如何通过反射设置这些属性?我在做/思考一些根本不正确的事情吗?
最近我发现自己使用StringBuilder进行所有字符串连接,无论大小,但是在最近的性能测试中,我换掉了同事的stringOut = string1 +"." String2样式连接(在一个10000x +循环中使用,每次都是StringBuilder)用于StringBuilder只是为了看看它在次要连接中会有什么不同.
我发现,在性能测试的许多次运行中,无论是串联还是StringBuilder,更改都无论是更高还是更低(重申这是针对小型连接).
在什么时候,StringBuilder对象的"newing up"否定了使用它的好处?
我只是查看F#,如果这是一个愚蠢的问题,请道歉,但在VS2008 F#CTP 1.9.6.2'Tutorial'项目中,//和///都用于评论代码.
两个斜杠与三个斜杠注释之间是否存在功能差异,或者是否使用///对函数进行注释(并显示在教程代码中)并使用//用于其他所有内容?
我是一个Winforms和业务引擎开发人员,他在2年多来第一次使用asp.net,在那段时间我注意到了一些常规更改.
反布局'运动背后的逻辑是什么?
它是否允许使用css类来处理布局,如果是这样,这应该是页面上的问题,你确定它会保持静态,还是只是被认为是"丑陋"?
是否有一个简单的字符串格式,它将采用小数表示小时和小时的分数,并将其显示为小时和分钟?
例如:5.5格式化显示5小时30分钟.
我很乐意自己编写代码,但是如果可用的话,我更愿意使用现有的功能
在webforms/winforms生成的代码场景之外是否有很好的使用部分类?或者这个功能基本上是支持吗?
有没有一个很好的模式允许我绕过无法删除对象,而我循环通过一个可枚举的集合(例如,字典中的IList或KeyValuePairs)
例如,以下操作失败,因为它修改了在foreach期间枚举的List
foreach (MyObject myObject in MyListOfMyObjects)
{
if (condition) MyListOfMyObjects.Remove(myObject);
}
Run Code Online (Sandbox Code Playgroud)
在过去,我使用了两种方法.
我已经用反向for循环替换了foreach(以便在我删除对象时不更改我循环的任何索引).
我还尝试存储一个新的对象集合,以便在循环中移除,然后循环遍历该集合并从原始集合中删除对象.
这些工作正常,但感觉不好,我想知道是否有人提出了更优雅的解决方案
扩展方法中是否真的不支持params关键字?
我发现当我使用params关键字创建扩展方法时,我得到"没有重载的X方法需要2个参数".Intellisense识别扩展方法,甚至知道它需要一个对象数组.
这是一些示例代码:
public static DalRow EasyRetrieveSingle(this DalRow dalRow, object[] parameters)
{
Dictionary<string, object> dic = new Dictionary<string, object>();
for (int i = 0; i < parameters.Length; i += 2)
dic.Add(parameters[i].ToString(), parameters[i + 1]);
List<DalRow> list = DalRow.RetrieveByFieldValues(dalRow.Structure, null, dic).Cast<DalRow>().ToList();
if (list.Count == 0) return null;
return list[0];
}
Run Code Online (Sandbox Code Playgroud)
这是一些调用它的示例代码(无济于事)
(new X()).EasyRetrieveSingle(1, 2);
Run Code Online (Sandbox Code Playgroud) c# ×6
.net ×3
f# ×2
combobox ×1
commenting ×1
html ×1
html-table ×1
ienumerable ×1
layout ×1
reflection ×1