有人可以告诉我为什么下面的代码不起作用.数据将保存到csv文件中,但数据不会分开.它全部存在于每行的第一个单元格中.
StringBuilder sb = new StringBuilder();
foreach (DataColumn col in dt.Columns)
{
sb.Append(col.ColumnName + ',');
}
sb.Remove(sb.Length - 1, 1);
sb.Append(Environment.NewLine);
foreach (DataRow row in dt.Rows)
{
for (int i = 0; i < dt.Columns.Count; i++)
{
sb.Append(row[i].ToString() + ",");
}
sb.Append(Environment.NewLine);
}
File.WriteAllText("test.csv", sb.ToString());
Run Code Online (Sandbox Code Playgroud)
谢谢.
我正在尝试使用WinForms首次实现MVP方法.
我试图了解每一层的功能.
在我的程序中,我有一个GUI按钮,当单击时会打开一个openfiledialog窗口.
因此,使用MVP,GUI处理按钮单击事件,然后调用presenter.openfile();
在presenter.openfile()中,是否应该将该文件的开头委托给模型层,或者因为没有要处理的数据或逻辑,它应该只是对请求进行操作并打开openfiledialog窗口吗?
更新: 我已经决定提供赏金,因为我觉得我需要进一步的帮助,最好根据我的具体要点量身定制,以便我有上下文.
好的,在阅读了MVP后,我决定实施被动视图.实际上,我将在Winform上有一堆控件,由Presenter处理,然后委托给Model.我的具体要点如下:
当winform加载时,它必须获得树视图.我认为视图应该调用一个方法如:presenter.gettree(),这是正确的,这将依次委托给模型,该模型将获取树视图的数据,创建并配置它,将其返回给演示者,然后将传递到视图,然后将其简单地分配给一个面板?
对于Winform上的任何数据控件,这是否相同,因为我还有一个datagridview?
我的应用程序,有许多具有相同程序集的模型类.它还支持插件架构,其插件需要在启动时加载.视图是否只调用一个presenter方法,然后调用一个加载插件并在视图中显示信息的方法?然后哪个层控制插件引用.视图是否会引用它们或演示者?
我认为视图应该处理关于表示的每一件事,从树视图节点颜色到数据网格大小等,我是否正确?
我认为这是我的主要关注点,如果我理解这些流程应该如何,我想我会没事的.
在C#中实现自定义异常的行业标准最佳实践是什么?
我检查了谷歌,并提出了大量建议,但我不知道哪些建议具有更高的可信度.
如果任何人有权威文章的链接,那也会有所帮助.
我是Python新手(通常使用C#),在过去几天开始使用它.
在一个类中,您是否需要对该类数据成员和方法的任何调用加前缀?那么,如果我正在调用一个方法或从该类中获取一个值,那么我需要使用self.method()
或者self.intvalue
,例如?
我只是想检查一下我还没有遇到过那种冗长的方式.
昨天我问了一个关于使用反射或策略模式动态调用方法的问题.
但是,从那时起,我决定将方法更改为实现公共接口的各个类.原因是,每个类虽然具有一些相似之处,但也执行该类所特有的某些方法.
我一直在使用这样的策略:
switch (method)
{
case "Pivot":
return new Pivot(originalData);
case "GroupBy":
return new GroupBy(originalData);
case "Standard deviation":
return new StandardDeviation(originalData);
case "% phospho PRAS Protein":
return new PhosphoPRASPercentage(originalData);
case "AveragePPPperTreatment":
return new AveragePPPperTreatment(originalData);
case "AvgPPPNControl":
return new AvgPPPNControl(originalData);
case "PercentageInhibition":
return new PercentageInhibition(originalData);
default:
throw new Exception("ERROR: Method " + method + " does not exist.");
}
Run Code Online (Sandbox Code Playgroud)
但是,随着潜在类数量的增加,我将需要不断添加新类,从而打破关闭修改规则.
相反,我使用了一个解决方案:
var test = Activator.CreateInstance(null, "MBDDXDataViews."+ _class);
ICalculation instance = (ICalculation)test.Unwrap();
return instance;
Run Code Online (Sandbox Code Playgroud)
实际上,_class参数是在运行时传入的类的名称.这是一种常见的方法,这会有任何性能问题吗?
我很反思,所以欢迎你提出建议.
所以我们终于在一些开发者工作站上安装了VS2010并且可以使用C#4.0功能.虽然我们开发的大部分内容仍然必须暂时以.Net 3.5为目标.
当我启动一个新项目并将目标设置为.Net 3.5时,它仍然允许我使用C#4.0,如动态.因此,您可以在针对.net 3.5时使用C#4.0功能吗?这些功能是否可以在.Net 4.0不可用的环境中使用?
谢谢.
我正在使用以下事件来捕获主UI线程中的未处理异常.
Application.ThreadException
Run Code Online (Sandbox Code Playgroud)
不幸的是,它没有在单独的线程中捕获那些未处理的错误.我知道
AppDomain.CurrentDomain.UnhandledException
Run Code Online (Sandbox Code Playgroud)
但是,这似乎在触发时关闭应用程序,而前者则没有.
有没有办法在单独的线程上处理未处理的异常,而不关闭应用程序?
我只是回顾一些旧的代码(有一些空闲时间),我注意到一个相当冗长的switch语句.由于获得了新知识,我已经以下面的形式重构了它:
private Dictionary<string, Action> createView
{
get
{
return new Dictionary<string, Action>()
{
{"Standard", CreateStudySummaryView},
{"By Group", CreateStudySummaryByGroupView},
{"By Group/Time", CreateViewGroupByHour}
};
}
}
Run Code Online (Sandbox Code Playgroud)
你会考虑这个好习惯,还是仅仅是一个超级丰富和不必要的案例?我渴望确保我学到的新技术,仅仅为了它而不是聪明,并且它们实际上为代码增加了好处.
谢谢.
我希望能够使用面板或类似工具将图形绘制到Winform上.如果图形变得比控件大,我似乎无法看到有关添加滚动条的任何内容?
是否可以使用面板执行此操作,或者是否存在允许它的类似控件?
谢谢.
我正在尝试使用每行上的复选框创建一个组合框,以允许多次选择.作为用户控件或自定义控件,这会更好吗?
我之前没有创建过一个控件,只是在寻找一个关于我需要走向哪个方向的建议.
谢谢.
c# ×9
.net ×2
winforms ×2
.net-3.5 ×1
activator ×1
csv ×1
mvp ×1
panel ×1
polymorphism ×1
python ×1
refactoring ×1
reflection ×1
wpf ×1