【蛙蛙推荐】ListControl绑定空值的处理

问题:我们从数据库取出数据绑定到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"开头的,就可以知道是否是个无效值了。

posted @   蛙蛙王子  Views(841)  Comments(0Edit  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示