您的位置:首页 > 编程语言 > ASP

ASP.NET 之 CheckBoxList在实际项目中的应用——高级查询、数据库读出默认选中

2009-10-15 19:41 866 查看
1.把CheckBoxList里面的项,存入数据库中的一个字段(cbxValues)中(多个时用逗号隔开)
string MemberObject = string.Empty;
for (int i = 0; i < cbxMemberObject.Items.Count; i++) //循环遍历页面中的CheckBoxList(id为cbxMemberObject)
{
if (this.cbxMemberObject.Items[i].Selected)//判断CheckBoxList当中有没有选中
{
MemberObject = MemberObject + this.cbxMemberObject.Items[i].Value.ToString() + ",";
//如果选中,就把cbxMemberObject的ID号赋值给MemberObject 后面加上逗号用来分开多个选项
}
}
if (MemberObject.Length > 1) //判断MemberObject里是否有值。
{
MemberObject = MemberObject.Substring(0, MemberObject.Length - 1); //把最后一位(逗号)截取掉
cm.cCouObject = MemberObject; //把截取后的值赋值给cm.cCouObject(三层中的Model层)最后存入数据库中。
}

2.首先给大家看下效果图片:



这是从数据中读出默认选中后的效果。
下面是主要实现的代码:

DataRowView dr = c.selectvalue(id).DefaultView[0];//首先建立一个自定义视图
string cbx= dr["cbxValues"].ToString(); //在数据库中找到cbxAll字段后赋值给cbx
string[] coj = cbx.Split(','); //把数据库中的数据用Split分离出逗号存放到coj数组中
for (int i = 0; i < coj.Length; i++) //循环遍历上面的数组
{

for (int j = 0; j < cbxMemberObject.Items.Count; j++)//循环遍历在页面中CheckBoxList里的所有项
{
if (this.cbxMemberObject.Items[j].Value == coj[i])//判断i遍历后的id与cbx当中的值是否有相同
{
this.cbxMemberObject.Items[j].Selected = true; //相同就选中
}
}
}
--------------------------------------------------------------------------------------------------------------------------------------
3.高级查询
首先先也给大家看下效果图



首先也需要上面1、2步操作
最后当点击查询的时候,从数据库读出。来拼接字符串。
如下代码:
string ValueName = "";
string TypeName = "";
for (int i = 0; i < cbxValue.Items.Count; i++)
{
if (this.cbxValue.Items[i].Selected)
{
ValueName = ValueName + "'" + this.cbxValue.Items[i].Text.ToString() + "'" + ",";
}
}
if (ValueName.Length > 1)
{
ValueName = ValueName.Substring(0, ValueName.Length - 1);
cm.CValueName = ValueName;
}
else
{
cm.CValueName = "''";
}

for (int i = 0; i < cbxType.Items.Count; i++)
{
if (this.cbxType.Items[i].Selected)
{
// cm.CTypeName = this.cbxType.Items[i].Text.ToString();
TypeName = TypeName + "'" + this.cbxType.Items[i].Text.ToString() + "'" + ",";
}
}
if (TypeName.Length > 1)
{
TypeName = TypeName.Substring(0, TypeName.Length - 1);
cm.CTypeName = TypeName;
}
else
{
cm.CTypeName = "''";
}

string sql = "select * from t_Customer as c where";
if (ValueName != "")
{
sql = sql + string.Format(" cValueName in ({0})", ValueName) + " and";
}
if (TypeName != "")
{
sql = sql + string.Format(" cTypeName in ({0})", TypeName) + " and";
}

这里需要两个注意的地方,一个是当用没有点击cbxlist的时候,就默认查询全部,这样上面的最后就还有个where,当用户点击后在sql最后还有个and,所以最后都必须要把她们截取掉。
//判断最后的字符串是不是and是的话,把and字符串截取掉

string result=sql.Substring(sql.Length - 3); //获取sql字符串最后3位
if (result.Trim() == "and")
{
result = sql.Substring(0, sql.Length - 3);
}
//当用户什么都没有点击的时候定义s 获取sql语句最后6位字符串where
s = sql.Substring(sql.Length - 6);
//判断最后的字符串是不是where是的话,把where字符串截取掉
if (s.Trim() == "where")
{
//把截取后的SQL语句赋值给S select * from t_Customer
s = sql.Substring(0, sql.Length - 6);
}
------------------------------------------------------------------------------------------------------
本人是初学者,上面都是本人在实际项目中遇到的问题,最后弄了很久才解决了,所以发出来给大家看看。希望遇到此类的问题,可以参考了。如上面的还有些疑问的,或者有更好的提议。给我留言或者加我的群,大家相互交流!(群里高手挺多的喔!) 76512040 、88465849
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: