问题:我们从数据库取出数据绑定到listbox里,如果DataValueField有多项为空,而你的listbox可以多选,这时候你选了多个ListBox的值,再点击其它按钮处理这些值的时候,尽管你选了多个值,但因为好多value都是零长度字符串,所以无法选中。
解决:我们可以利用ListControl的DataBinding事件来处理数据源,然后重新绑定,代码如下。
void bindlist()
{
//获取数据源并设置相应的绑定字段
ListBox1.DataSource = wawa.ContactsManager.GetDetpGroup(1);
ListBox1.DataValueField ="mobile";
ListBox1.DataTextField = "friendname";
//挂接Binding事件
ListBox1.DataBinding +=new EventHandler(ListBox1_DataBinding);
ListBox1.DataBind();
}
private void ListBox1_DataBinding(object sender, EventArgs e)
{
//获取listbox
ListControl lc = sender as ListControl;
if (lc != null)
{
//获取数据源
DataSet ds = lc.DataSource as DataSet;
if (ds != null)
{
DataTable dt = ds.Tables[0];
//判断数据源里是否有mobile列
if (dt.Columns.IndexOf("mobile") != -1)
{
int i = 0;
//循环所有行,并重新给mobile列赋值
//注意这里用一个递增的i作为后缀,是为了防止绑定后的listbox值重复
foreach(DataRow dr in dt.Rows)
{
if (dr.IsNull("mobile") || dr["mobile"].ToString() == "")
{
dr["mobile"] = "n/a" + i.ToString();
i++;
}
}
}
lc.DataSource = dt;
}
}
}
然后你处理值的时候可以判断value是否是"n/a"开头的,就可以知道是否是个无效值了。