请教一个有关CheckBoxList的绑定问题 ?

williamwang8187 2008-06-29 11:19:03
现在有一个程序,需要绑定一个指定经销商的省份,地区信息,页面上有两个CheckBoxList,一个绑定省份,另一个通过绑定的省份来绑定城市,由于一个经销商可以负责多个省份和多个地区所以在数据库中省份和地区的存储也有特殊要求,例如:如果一个经销商如果有多个省份 那么在数据库中的省份字段就以逗号分隔开省份;如"01,02,03",而地区是由省份编号+城市编号得到的;例如一号省份的一号城市就是 01+001;就是“01001”, 同样多个的地区信息间也以逗号隔开,例如"01001,02002,06008,...";

我写的加载省份信息CheckBoxList的代码:
/// <summary>
/// 绑定负责省份多选框信息
/// </summary>
private void BindCBLProvince()
{
Area area = new Area();

IList<DefProvince> provincelist = area.GetAllProvince();

CBLProvince.DataSource = provincelist;
CBLProvince.DataTextField = "provincename";
CBLProvince.DataValueField = "provinceid";
CBLProvince.DataBind();
}

通过省份编号加载城市的信息的代码:
/// <summary>
/// 绑定负责地区多选框信息
/// </summary>
/// <param name="provinceid">所选择的省份编号</param>
private void BindCBLCity(string provinceid)
{
Area area = new Area();

IList<DefCity> citylist = area.GetCityByProvince(provinceid);


foreach (DefCity def in citylist)
{

if (!this.CBLCity.Items.Contains(new ListItem(def.CityName, provinceid + def.CityId)))
{
this.CBLCity.Items.Add(new ListItem(def.CityName, provinceid + def.CityId));
}
}
}
现在我通过经销商编号查询出指定经销商的全部信息,也包括省份地区信息,在绑定时,省份信息钩选的是正确的,但城市信息则有错误,只能钩选出最后一个所选省份的城市,前面钩选的被后面的覆盖了,请教高手怎么解决:
以下是我的代码:
IList<DefDealer>dealerlist=dealer.QueryDealerByid(id);

string strlocalProvince = dealerlist[0].LocalProvince;
string strlocalCity = dealerlist[0].LocalCity;
string[] proArray = strlocalProvince.Split(',');
string[] cityArray = strlocalCity.Split(',');

for (int nI = 0; nI < proArray.Length; nI++)
{
int nIndex=Convert.ToInt32(proArray[nI].ToString())-1;
CBLProvince.Items[nIndex].Selected = true;

BindCBLCity(CBLProvince.Items[nIndex].Value);


for (int nN = 0; nN < cityArray.Length; nN++)
{
string strpro = cityArray[nN].Substring(0, 2);
string strcity = cityArray[nN].Substring(2, 3);

int nCount = Convert.ToInt32(strpro) - 1;
int nCity = Convert.ToInt32(strcity) - 1;
CBLCity.Items[nCity].Selected = true;
}

}






...全文
189 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
williamwang8187 2008-06-29
  • 打赏
  • 举报
回复
该怎么解决呢?请教高手! 现在程序报错 CBLCity.Items[nCity].Selected = true;
“索引超出范围”,怎么解决阿
Vhardtobest 2008-06-29
  • 打赏
  • 举报
回复
for (int nI = 0; nI < proArray.Length; nI++)
{
int nIndex=Convert.ToInt32(proArray[nI].ToString())-1;
CBLProvince.Items[nIndex].Selected = true;

BindCBLCity(CBLProvince.Items[nIndex].Value);


for (int nN = 0; nN < cityArray.Length; nN++)
{
string strpro = cityArray[nN].Substring(0, 2);
string strcity = cityArray[nN].Substring(2, 3);

int nCount = Convert.ToInt32(strpro) - 1;
int nCity = Convert.ToInt32(strcity) - 1;
CBLCity.Items[nCity].Selected = true;
}



见红色,这块有问题呀,你把省份信息选择后,只选择了一个省份,所以就不该去循环省份了,你这样循环,程序肯定是执行到最后一个省份了啊
程序执行到最后就是BindCBLCity(CBLProvince.Items[proArray.Length].Value);
changjiangzhibin 2008-06-29
  • 打赏
  • 举报
回复
建议:
1 做成客户端刷新
2 回发为True,每次将选中的值放入一个集合中(考虑集合的个数,看需求)
3 每次遍历一次,更新选中的集合中的内容
4 调试,微调
showenx 2008-06-29
  • 打赏
  • 举报
回复
逻辑不算复杂,搂住可以自己debug一下,看看数据是怎么变化的

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧