表单控件的副产品——查询控件
2008-05-29 18:51 金色海洋(jyk) 阅读(3233) 评论(8) 编辑 收藏 举报查询控件
温故而知新
能自己“跑”的表单控件,思路,雏形,源码。vs2005版本
表单控件续(1)——应用接口来简化和分散代码
当初在写表单控件的时候,突然想到,这个表单控件稍微修改一下不就是一个查询控件了吗?
那么查询控件需要做的什么事情呢?
1、自己描绘控件,比如能够自己添加文本框、下拉列表框这一类的控件。
2、可以自己获取用户输入的信息,根据查询方式组合where 后面的 SQL语句 。
是不是和表单控件很像呢?
在表单控件的SaveData()里面我们可以得到字段名称和对应的用户输入的信息,那么我们就可以写成这种方式。
for (int i = 0; i < info.Length; i++)
{
iCntl = this.FindControl("c_" + info[i].ColSysName) as IGetControlValue;
if (iCntl != null)
query = ColSysName + "like '%" + iCntl.GetControlValue() + "%'";
}
当然并不是所有的查询都是只用 like 就可以搞定的,这里需要一个查询方式的属性,于是我们可以扩展一下ControlInfos 加一个属性(FindKind),用来记录查询方式。
然后根据这个属性,我们就可以来组合SQL语句了,准确的说是where 后面的SQL语句。目前的方法还是需要使用case 。
string str = iCntl.GetControlValue()
switch ( infos[i].FindKind)
{
case 1:
if (DoubleType.FromString(inputInfo[i]) != 0.0)
{
str2 = " [" + info[i].ColSysName + "]=" + str;
}
goto Label_0615;
case 2:
str2 = " [" + info[i].ColSysName + "]='" + str + "'";
goto Label_0615;
case 3:
str2 = " [" + info[i].ColSysName + "] like '%" + str + "%'";
goto Label_0615;
case 4:
str2 = " [" + info[i].ColSysName + "] like '" + str + "%'";
goto Label_0615;
case 5:
str2 = " [" + info[i].ColSysName + "] like '%" + str + "'";
goto Label_0615;
case 6:
str2 = " [" + info[i].ColSysName + "] like '" + str + "'";
goto Label_0615;
case 11:
str2 = " [" + info[i].ColSysName + "]>'" + str + "'";
goto Label_0615;
case 12:
str2 = " [" + info[i].ColSysName + "]<'" +str + "'";
goto Label_0615;
case 13:
str2 = " [" + info[i].ColSysName + "]>='" +str + "'";
goto Label_0615;
case 14:
str2 = " [" + info[i].ColSysName + "]<='" + str + "'";
goto Label_0615;
case 0x15:
strArray3 = inputInfo[i].Split(new char[] { '|' });
if (strArray3[0].Length != 0)
{
goto Label_04B1;
}
str2 = "";
goto Label_0615;
case 0x16:
strArray2 = inputInfo[i].Split(new char[] { '|' });
if (strArray2[0].Length != 0)
{
break;
}
str2 = "";
goto Label_0615;
case 0x17:
str3 = inputInfo[i].Replace("|", ",");
if (str3.Length != 0)
{
goto Label_0549;
}
str2 = "";
goto Label_0615;
case 0x18:
str4 = inputInfo[i].Replace(",", "','").Replace("|", "','");
if (str4.Length != 0)
{
goto Label_05CA;
}
str2 = "";
goto Label_0615;
case 30:
str2 = "";
goto Label_0615;
default:
goto Label_0615;
}
不好意思,原来使用vb.net来写的,这个是用Reflector反编译的,不知道为什么还给弄出来goto了。看来我写的代码不用混淆也可以了,我自己都看不懂了。还是发一个“原版”的吧。






































































































































当然这里有一个适用范围和习惯的问题。我是习惯使用DataTable来装载数据,而填充 DataTable 需要SQL语句,那么我只需要得到 where 后面的部分,查询的功能就可以实现了,所以对于我来说,查询控件能够输出像 "myName like '%jyk%'" 这样的字符串就已经够用了。
还记得分页控件吗?分页控件有一个属性:myPage.SqlQuery = "";这个属性就是用来给分页控件设置查询条件的,正好可以查询控件对应上,这两个控件一配合起来,查询、分页就变得非常的简单了。
对其他的查询方式的支持的考虑
我没有用过使用实体类来显示数据的方式,所以也不知道对于实体类来说,查询是怎么做的,不过这个查询控件至少可以提供字段名和对应的值,应该是可以用得上的吧。
可能有些人喜欢使用存储过程来返回记录,查询条件也会写在存储过程里面,那么在调用存储过程的时候需要传递存储过程的参数,这种情况,查询控件也可以帮上点忙吧。
抽象
这样出现了一个问题,由于两个控件比较象,但是总不能等表单控件写好了,然后复制粘贴,再改一改,查询控件就诞生了吧。我们是不是应该对于相同的地方进行“抽象”呢,把相同的代码放在基类里面。可能你会说,就两种情况,有必要抽象吗,还弄一个基类出来是不是多此一举呢?我的回答是:很有必要。除非这两个控件件写完了之后就再也不需要修改了。
只是单独写很好写,不用顾忌其他,但是要考虑到其他的用法的话,那就要十分小心了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!