我在DataGridView中显示一个最多100,000行的表.该表有一列包含大字符串.我发现该设置AutosizeMode会AllCells导致应用程序长时间冻结,同时计算所需的宽度.作为妥协,我将自动调整大小模式设置为DisplayedCells.然后我将一个方法绑定到dataGrid的scroll事件:
public void MethodThatBindsDataToTheDatagridview(DataTable table)
{
dataGrid.Source = table;
dataGrid.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
dataGrid.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
}
public void DataGridScroll(object sender, ScrollEventArgs e)
{
((DataGridView)sender).Update();
}
Run Code Online (Sandbox Code Playgroud)
我也尝试过同样的Refresh方法.我的期望是DataGrid将根据显示的行设置列宽.但是,这只在加载表时发生一次,但滚动事件不会触发列宽的更改.
Laravel 的通知允许notifications使用toArray或将数据保存在表中toDatabase。但文档没有澄清两件事。
在表中存储数据时toArray()和时有什么区别?toDatabase()notifications
我在表中添加了一个附加属性 ( link) notifications,但是当我这样做时:
public function toDatabase() {
return [
'data'=>'My Data',
'link'=>'My Link'
];
}
Run Code Online (Sandbox Code Playgroud)我最终在属性下序列化了数组data。toArray()使用or函数保存属性的正确方法是什么toDatabase()?
我dynamic在视图模型中使用对象,因为我发现使用 Automapper 之类的东西不必要的开销,并且发现这种方法更加灵活和轻量级。我正在使用来自即兴界面的构建器,如下所示:
private dynamic New = Builder.New();
private dynamic GetViewModel(Product p)
{
var viewModel = New.Product( id : p.Id, name : p.Name );
viewModel.AdditionalProperty = "some additional data";
return viewModel;
}
Run Code Online (Sandbox Code Playgroud)
在某些情况下,“扩展”实际对象会比逐一重新映射所有属性更好,类似于在 JavaScript 中使用jQuery.extend()
private dynamic GetViewModel(Product p)
{
var viewModel = //create base dynamic object, that has all the members of p.
viewModel.AdditionalProperty = "some additional data";
return viewModel;
}
Run Code Online (Sandbox Code Playgroud)
这应该可以通过ExpandoObject结合反射和迭代所有成员来实现,但我想知道是否有更干净/更整洁的解决方案。
在Java中,我们可以像这样动态地实例化一个对象(只知道参数类型):
Class<?> msgClass = Class.forName(className);
constructor = msgClass.getConstructor(String.class, String.class, String.class);
MyClass myClass = (MyClass) constructor.newInstance(myString, myString2, myString3);
public class MyClass {
public MyClass(String s, String s2, String s2){}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在objective-c中做同样的事情,只知道要传递给objective-c类构造函数的参数类型.
提前致谢.
说我有这个班:
class MyClass {
private String s;
// more attributes here
public MyClass(String s, /*more constructor params*/) {...}
public String myMethod(String s) {
//complex logic here
}
}
Run Code Online (Sandbox Code Playgroud)
要进行单元测试,myMethod()我需要创建整个对象(需要构造许多参数等),而方法只使用s.
Altenatelly我可以添加一个静态方法:
class MyClass {
private String s;
// more attributes here
public MyClass(String s, /*more constructor params*/) {...}
public String myMethod(String s) {
return myStaticMethod(s);
}
public static myStaticMethod(String s) {
//complex logic here
}
}
Run Code Online (Sandbox Code Playgroud)
现在我可以轻松测试"复杂逻辑"而无需创建对象.
someStaticMethod(String s)应该对班级没有副作用.所以我添加了一个额外的方法只是为了方便测试.这是一个好习惯吗?
我有这个类Person,我想要它的几个实例,我想在一个文件中序列化它们.我该怎么做?我不能创建一个列表Person然后序列化它.我希望可以反序列化一个保存的类实例(例如保存的第四个实例).我该怎么做?
人员类:
[ProtoContract]
class Person
{
public Person()
{ }
[ProtoMember(1)]
public int a;
public Person(int d)
{
a = d;
}
}
Run Code Online (Sandbox Code Playgroud)
序列化的方法:
public void serialize()
{
Person p1 = new Person(1);
Person p2 = new Person(2);
Person p3 = new Person(3);
Person p4 = new Person(4);
Person p5 = new Person(5);
FileStream file = File.Create("person.bin") ;
Serializer.Serialize(file, p1);
Serializer.Serialize(file, p2);
Serializer.Serialize(file, p3);
Serializer.Serialize(file, p4);
Serializer.Serialize(file, p5);
file.Close();
}
Run Code Online (Sandbox Code Playgroud)
反序列化的方法:
public void deserialize()
{
Person …Run Code Online (Sandbox Code Playgroud) 我有一个文本文件:
FIRST LINE
SECOND LINE
THIRD LINE
...
Run Code Online (Sandbox Code Playgroud)
我想覆盖文件的第一行,例如。使用"2345"
StreamWriter,我只能将文件覆盖为:
2345
Run Code Online (Sandbox Code Playgroud)
和
using (StreamWriter newWriter = new StreamWriter(playingFileDirectory, false)){
newWriter.WriteLine("2345");
}
Run Code Online (Sandbox Code Playgroud)
或者
FIRST LINE
SECOND LINE
THIRD LINE
...
2345
Run Code Online (Sandbox Code Playgroud)
和
using (StreamWriter newWriter = new StreamWriter(playingFileDirectory, true)){
newWriter.WriteLine("2345");
}
Run Code Online (Sandbox Code Playgroud)
然而我想要的结果是:
2345
SECOND LINE
THIRD LINE
...
Run Code Online (Sandbox Code Playgroud)
有没有快速的方法(线性时间)来做到这一点?我有一些文本需要在用户按下按钮时更新。数据库记录包含 100,000 行。我只想像在文本编辑器中一样更改第一行,但不想更改第一行并重写整个文件。
我有一些POJO包用于unmarhsalling.我想创建一个通用的方法,你可以传递你将无法解决的类.
例如:
public class Test<E>
{
E obj;
// Get all the tags/values from the XML
public void unmarshalXML(String xmlString) {
//SomeClass someClass;
JAXBContext jaxbContext;
Unmarshaller unmarshaller;
StringReader reader;
try {
jaxbContext = JAXBContext.newInstance(E.class); // This line doesn't work
unmarshaller = jaxbContext.createUnmarshaller();
reader = new StringReader(xmlString);
obj = (E) unmarshaller.unmarshal(reader);
} catch(Exception e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在上面的代码中指出的行上得到一个错误:Illegal class literal for the type parameter E.E当然,它将来自实际存在的POJO列表.
我怎么做到这一点?
// Example class
class A : public QObject
{
Q_OBJECT
void fun() {
Timer::SingleShot(10, timerSlot); //rough code
}
public slot:
void timerSlot();
}
auto a = SharedPointer<A>(new A);
a->fun();
a->reset(); // a deleted
Run Code Online (Sandbox Code Playgroud)
在这种情况下删除a并触发计时器后,它会执行timerSlot()吗?我得到了一次非常罕见的崩溃,并且不确定是不是因为这个逻辑中有些可疑.
我有一个列表和一个功能:
t = [3, [1], [2, [1], [1]]]
f = lambda x: x**2
Run Code Online (Sandbox Code Playgroud)
我想要这样的结果:
[9, [1], [4, [1], [1]]]
Run Code Online (Sandbox Code Playgroud)
我试图使用地图功能,但似乎没有用
我这样做时出现类型错误:
list(map(f, t))
Run Code Online (Sandbox Code Playgroud) c# ×3
dynamic ×2
java ×2
autosize ×1
c++ ×1
datagridview ×1
eloquent ×1
generics ×1
laravel ×1
laravel-5 ×1
laravel-5.3 ×1
object ×1
objective-c ×1
python ×1
python-3.x ×1
qeventloop ×1
qt ×1
qt5 ×1
qtimer ×1
scala ×1
text-files ×1
unit-testing ×1
winforms ×1
xml ×1