我有一个C#Windows窗体项目,其中包含一个包含2个ListBox和一个按钮的Form.在FormLoad上,左侧ListBox填充了一个列表(大约1800个项目),其中包含有关证券(ID和名称)的信息,当用户点击按钮时,所有证券都从左侧列表框移动到右侧.
当我没有使用BindingSources时,即我直接使用ListBoxes的Items属性时,移动过程需要几秒钟:
private void button1_Click(object sender, EventArgs e)
{
while (listBox1.Items.Count > 0)
{
Security s = listBox1.Items[0] as Security;
listBox1.Items.Remove(s);
listBox2.Items.Add(s);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我使用BindingSources时,它需要几分钟:
listBox1.DataSource = bindingSource1;
listBox2.DataSource = bindingSource2;
...
private void MainForm_Load(object sender, EventArgs e)
{
ICollection<Security> securities = GetSecurities();
bindingSource1.DataSouce = securities;
}
private void button1_Click(object sender, EventArgs e)
{
while (bindingSource1.Count > 0)
{
bindingSource1.Remove(s);
bindingSource2.Add(s);
}
}
Run Code Online (Sandbox Code Playgroud)
BindingSource方式需要更长时间的原因是什么?有没有办法让它更快?
ASP.NET MVC3中有一种方法可以自定义Html.ValidationMessageFor(...)方法的结果吗?例如,在错误文本旁边添加图像或类似...但我希望能够更改图像,无论验证是否成功......
我有一个字符串类的自定义实现.我在字符串和类之间添加了自定义转换运算符,并且转换正常.但是,如果我首先将自定义对象转换为System.Object然后转换为字符串,则说:"无法将类型'MyString'强制转换为'System.String'".这是为什么?我怎样才能启用它...
class MyString
{
public string S {get; set;}
public MyString(string s)
{
this.S = s;
}
public static implicit operator string(MyString s)
{
return s.S;
}
public static implicit operator MyString(string s)
{
return new MyString(s);
}
}
class Program
{
static void Main(string[] args)
{
MyString ms = new MyString("a");
string s = ms;
object o = ms;
string s1 = (string)o; // <-- this throws the exception!
}
}
Run Code Online (Sandbox Code Playgroud)