日期:2014-05-18  浏览次数:20769 次

高手進來撿100分
今天在使用 AutoCompleteExtender 自动完成控件时发现一个问题,也许这是微软的一个 bug 吧。如果返回的数组是纯数字,那么将变成 undefined或 null。

public string[] GetUsers(string prefixText, int count) //兩個參數分別是輸入文本跟提示項數
  {
  string[] items = new string[count];
  SqlConnection myCon = new SqlConnection("Data Source=**;Initial Catalog=**;User ID=**;Password=**"); //數據庫連接
  myCon.Open(); //打開數據庫連接 select * from authors
  SqlCommand myCmd = new SqlCommand("select top " + count + " * from authors where ziplike '" + prefixText + "%'", myCon);
  SqlDataReader myDR = myCmd.ExecuteReader();
  string auid;
  int i = 0;
  while (myDR.Read())
  {
  auid = myDR["zip"].ToString().Trim();
  items[i++]=(auid);
  }
  myCon.Close(); //關閉數據庫連接
  return items;
  }
由於查到的郵編(ZIP)是純數字就出現了undefined的現象
我不清楚为什么数字字符串会变成 undefined 和 null,那又要如何解決這一問題
跪求高手們不吝賜教,100分相送


------解决方案--------------------
楼主你的问题不是难,而是奇怪.按理说,zip Like '1%'都会把你第一个字符为"1"的记录取出来,但你现在取到的却是undefined,你看一下,在Sql查询分析器里执行:
select top 5 * from authors where zip like '1%'

如果也如你上面所说,就要检查你zip具体内容了.如果正确,就检查你取数据的语法.
------解决方案--------------------
1、Count是用来拼写在sql语句中的,不是用来声明数组的。建议你使用ArrayList来保存你需要的结果。这样能够避免产生null。或者使用DataTable获取结果,然后根据DataTable.Rows.Count声明数组。
2、我没用过AutoCompleteExtender,是不是有些格式化的内容。
------解决方案--------------------
应该是类型转换问题,数组初始化后未值引起
while (myDR.Read()) 

auid = myDR["zip"].ToString().Trim(); 
  items[i++]=(auid);

改成 items[i++] = " "+auid;
试试