ajax|原创.AjaxSearchClientScript.js 
var tbPanel            = null;        //用于展示组合条件的表控件 
var tableName        = null;        //记录查询的表 
var fieldsInfo        = null;        //保存从服务端取得的对应表的字段信息 
var no                = 0;        //为防止出现重复id保存的计数器 
//添加条件编辑行 
 
function addTerm(tbPanelId) 
{ 
    tbPanel = document.getElementById(tbPanelId); 
    if(tableName == null) tableName = document.getElementById("transValue").value; 
     
    // 添加一待填模板行 
    var row    = tbPanel.insertRow(); 
    no++; 
    row.id = "row"+no; 
     
    //*****************************step 1:添加字段选择部分***************************** 
    var cell            = row.insertCell(); 
    var fieldInputId    = "field"+row.id; 
    var newElement        = document.createElement("<SELECT ID='"+fieldInputId+"' onchange='javascript:getOpts("+row.id+");getInput("+row.id+")'></SELECT>"); 
     
    cell.insertBefore(newElement); 
     
    //取出字段信息,首次从服务端取得 
    if(fieldsInfo == null) 
    { 
        fieldsInfo = WebUI.AjaxSearchSystem.AjaxSearchMethod.GetFields(tableName.toString()).value; 
    } 
     
    //分解字段信息,格式为“字段中文名|字段名” 
 
    var fieldsInfoLen; 
    var i,index; 
    var fieldValue; 
     
    fieldsInfoLen = fieldsInfo.length 
     
    for(i=0;i<fieldsInfoLen;i++) 
    { 
        fieldValue = fieldsInfo[i]; 
        index = fieldValue.indexOf("|"); 
        newElement.options[newElement.options.length] = new Option(fieldValue.substring(0,index),fieldValue.substring(index+1,fieldValue.length)); 
    } 
     
    //*****************************step 2:提取默认(首个)字段对应的运算符************* 
    cell = row.insertCell(); 
    var optInputId = "opt" +row.id; 
    newElement = document.createElement("<SELECT ID='"+optInputId+"'  88px'></SELECT>"); 
    cell.insertBefore(newElement); 
     
    getOpts(row); 
     
    //*****************************step 3:设置字段条件值的录入(选择)框*************** 
    getInput(row); 
     
    //*****************************step 4:生成连接条件选择框*************************** 
    cell = row.insertCell(); 
    var relateInputId = "relate"+row.id; 
    newElement = document.createElement("<SELECT ID='"+relateInputId+"'></SELECT>"); 
    cell.insertBefore(newElement); 
    newElement.options[newElement.options.length] = new Option("并且","And"); 
    newElement.options[newElement.options.length] = new Option("或者","Or"); 
     
    //*****************************step 5:生成删除当前行按纽*************************** 
    cell = row.insertCell(); 
    var deleteBtnId = "delete"+row.id; 
    newElement = document.createElement("<INPUT ID='"+deleteBtnId+"' type='Button' class='redButtonCss' value='删除' onclick='javascript:DelRow("+row.id+")'>"); 
    cell.insertBefore(newElement); 
     
    //*****************************step 6:生成增加下一行按纽*************************** 
    cell = row.insertCell(); 
    var addBtnId = "add"+row.id; 
    newElement = document.createElement("<INPUT ID='"+addBtnId+"' type='Button' class='redButtonCss' value='新增' onclick='javascript:addRow("+row.id+")'>"); 
    cell.insertBefore(newElement); 
} 
 
//取得并设置运算符 
function getOpts(row) 
{ 
    var rowId = row.id; 
     
    var fieldSelId = "field"+rowId; 
    var field = document.getElementById(fieldSelId); 
     
    var elemID = "opt"+rowId; 
    var element = document.getElementById(elemID); 
     
    var optInfo = WebUI.AjaxSearchSystem.AjaxSearchMethod.GetOpts(tableName.toString(),field.value).value; 
    var optValue; 
    var j,index; 
 
    //先移除原有项 
    while (element.options.length > 0)  
    {     
        element.options.remove(element.options.length-1); 
    } 
     
    for(j=0;j<optInfo.length;j++) 
    { 
        optValue = optInfo[j]; 
        index = optValue.indexOf("|"); 
        element.options[element.options.length] = new Option(optValue.substring(0,index),optValue.substring(index+1,optValue.length)); 
    } 
} 
 
//设置值录入控件,取得可能存在的枚举值 
 
function getInput(row) 
{ 
    var rowId = row.id; 
     
    var fieldSelId = "field"+rowId; 
    var field = document.getElementById(fieldSelId); 
     
    var inputId = "input"+rowId; 
    var inputElement = document.getElementById(inputId); 
     
    if (inputElement != null) 
    { 
        row.deleteCell(2); 
    } 
     
    //获取可能存在的枚举值 
 
    var enums = WebUI.AjaxSearchSystem.AjaxSearchMethod.GetEnums(tableName.toString(),field.value).value; 
    var oCell; 
     
    if (enums.length <= 1)//不存在枚举值,使用text 
    { 
        var elementSyntax = "<INPUT ID='"+elemID+"' type='text'  144px'>"; 
        oCell = row.insertCell(2); 
        var elemID = "input"+rowId; 
         
        switch(enums[0]) 
        { 
            case "int": 
                elementSyntax = "<INPUT ID='"+elemID+"' type='text'  144px' onKeyPress='javascript:return controlNumberKeyPress(this)' onKeyUp='return controlNumberOnKeyUp(this)' return !clipboardData.getData(\"text\").match(/\D/);'>" 
                break; 
            case "decimal": 
                elementSyntax = "<INPUT ID='"+elemID+"' type='text'  144px' onKeyPress='javascript:return controlMoneyKeyPress(this)' onKeyUp='return controlMoneyOnKeyUp(this,10,4)' return !clipboardData.getData(\"text\").match(/\D/);'>" 
                break; 
            case "datetime": 
                elementSyntax = "<INPUT ID='"+elemID+"' type='text'  144px'  >" 
                break; 
            default: 
                elementSyntax = "<INPUT ID='"+elemID+"' type='text'  144px'>" 
                break; 
        } 
                 
        var oNewItem = document.createElement(elementSyntax); 
        oCell.insertBefore(oNewItem); 
    } 
    else //存在枚举值,使用select 
    { 
        oCell = row.insertCell(2); 
        var elemID = "input"+rowId; 
        var oNewItem = document.createElement("<SELECT ID='"+elemID+"'  144px'></SELECT>"); 
        oCell.insertBefore(oNewItem); 
         
        var enumValue; 
        var j,index; 
        var element = document.getElementById(elemID); 
         
        for(j=1;j<enums.length;j++) 
        { 
            enumValue = enums[j]; 
            index = enumValue.indexOf("|"); 
            element.options[element.options.length] = new Option(enumValue.substring(0,index),enumValue.substring(index+1,enumValue.length)); 
        } 
    } 
     
    //用于值的数据类型 
    var fieldType= document.createElement("<INPUT id='type"+rowId+"'type='hidden'>"); 
    oCell.insertBefore(fieldType); 
    document.getElementById("type"+rowId).value = enums[0]; 
} 
 
//删除当前行 
 
function DelRow(row) 
{ 
    var rowOfIndex = row.rowIndex; 
     
    if(tbPanel.rows.length == 1) 
    { 
        return 
    } 
    else if (rowOfIndex == tbPanel.rows.length-1) 
    { 
        //删除最后一行时,保持增加按纽在最后一行 
 
        var cell = tbPanel.rows[rowOfIndex-1].insertCell(); 
        var addBtnId = "add"+tbPanel.rows[rowOfIndex-1].id; 
        newElement = document.createElement("<INPUT ID='"+addBtnId+"' type='Button' class='redButtonCss' value='新增' onclick='javascript:addRow("+tbPanel.rows[rowOfIndex-1].id+")'>"); 
        cell.insertBefore(newElement); 
    } 
     
    tbPanel.deleteRow(rowOfIndex); 
} 
 
//新增行 
 
function addRow(row) 
{ 
    row.deleteCell(5); 
    addTerm(tbPanel.id); 
} 
 
//得到组合条件 
function getCombinTerm() 
{ 
    var lenOfRows = tbPanel.rows.length; 
    var i=0; 
    var combinTerm = ""; 
    var field="",opt="",inputValue="",jointMode="",fieldType=""; 
     
    for(i=0;i<lenOfRows;i++) 
    { 
        field        = tbPanel.rows[i].cells[0].childNodes[0].value; 
        opt            = tbPanel.rows[i].cells[1].childNodes[0].value; 
        inputValue    = tbPanel.rows[i].cells[2].childNodes[0].value; 
         
        //判断字段类型 
        fieldType =tbPanel.rows[i].cells[2].childNodes[1].value; 
        switch(fieldType) 
        { 
            case "char": 
                if (inputValue == ""|| inputValue == null) 
                { 
                    if(opt.toLowerCase() == "like" || opt.toLowerCase() == "not like") 
                    { 
                        inputValue = "'%%'"; 
                    } 
                    else 
                    { 
                        inputValue = "''"; 
                    } 
                } 
                else 
                { 
                    if(opt.toLowerCase() == "like" || opt.toLowerCase() == "not like") 
                    { 
                        inputValue = "'%"+inputValue+"%'" 
                    } 
                    else 
                    { 
                        inputValue = "'"+inputValue+"'" 
                    } 
                     
                } 
                break; 
            case "int": 
                if (inputValue == ""|| inputValue == null) inputValue = 0; 
                break; 
            case "decimal": 
                if (inputValue == ""|| inputValue == null) inputValue = 0; 
                break; 
            case "datetime": 
                if (inputValue == ""|| inputValue == null) 
                { 
                    inputValue = "''"; 
                } 
                else 
                { 
                    inputValue = "'"+inputValue+"'" 
                } 
                break; 
            default: 
                break; 
        } 
         
        //拼接条件 
        combinTerm += " "+tableName+"."+field + " " + opt + " " + inputValue; 
         
        if (i<lenOfRows-1) 
        { 
            jointMode    = tbPanel.rows[i].cells[3].childNodes[0].value; 
            combinTerm += " " + jointMode 
        } 
    } 
     
    document.getElementById("transValue").value = combinTerm; 
    //return combinTerm; 
} 
 
// 
var oldValue = ""; 
var MONEY_FLAG = ""; 
var THOUSAND_FLAG = ","; 
 
function controlNumberKeyPress(textbox) 
{ 
    oldValue = textbox.value.replace(MONEY_FLAG,''); 
     
    return /\d/.test(String.fromCharCode(event.keyCode))||(textbox.value.indexOf('+')<0?String.fromCharCode(event.keyCode)=="+":false); 
} 
 
// 
function controlMoneyKeyPress(textbox) 
{ 
    var val = textbox.value.replace(MONEY_FLAG,''); 
 
    if(isNumber(event.keyCode)) 
    { 
        return true; 
    } 
     
    if (textbox.value.indexOf('+') < 0) 
    { 
        if ( String.fromCharCode(event.keyCode)=="+" && val.length < 1) 
            return true; 
    } 
 
    if ( textbox.value.indexOf('.') < 0) 
    { 
        if (String.fromCharCode(event.keyCode)==".") 
            return true; 
    } 
 
    return false; 
} 
 
//控制金额录入keyUp事件 
function controlNumberOnKeyUp(textbox) 
{ 
    //处理"后退"键 
    //alert(event.keyCode); 
    if (event.keyCode == 8) 
    { 
        return true; 
    } 
 
    if (String.fromCharCode(event.keyCode) != '\t' && event.keyCode != 13) 
    { 
        if( !/\d/.test(String.fromCharCode(event.keyCode)) && 
            event.keyCode != 190/**//* 如果录入"."则不执行 */ ) 
        { 
            //textbox.value = ""; 
            textbox.value = oldValue; 
            oldValue = textbox.value; 
            return false; 
        } 
    } 
     
    return true; 
} 
 
 
 
//控制金额录入keyUp事件 
function controlMoneyOnKeyUp(textbox, intBit , dotBit) 
{ 
    //处理"后退"键 
 
    if (event.keyCode == 8) 
    { 
        if (textbox.value.indexOf(MONEY_FLAG) < 0) 
        { 
            textbox.value = MONEY_FLAG + textbox.value; 
        } 
        return true; 
    } 
 
    if (String.fromCharCode(event.keyCode) != '\t' && event.keyCode != 13) 
    { 
        if( ! isNumber (event.keyCode) && 
            event.keyCode != 190/**//* 如果录入"."则不执行 */ ) 
        { 
            //textbox.value = ""; 
            textbox.value = MONEY_FLAG + oldValue; 
            oldValue = textbox.value.replace(MONEY_FLAG,""); 
            return false; 
        } 
 
        textbox.value = MONEY_FLAG + textbox.value.replace(MONEY_FLAG,''); 
 
        var val = textbox.value; 
        var dotBehind = ""; 
 
         
        val = val.replace(MONEY_FLAG,'').replace(/\,/g,''); 
        var iIndex = val.indexOf('.'); 
        if (iIndex > 0) 
        { 
            var valDot = val.substring(val.indexOf('.') + 1,val.length); 
            if (iIndex > intBit) 
            { 
                val = val.substring(0,intBit); 
            } 
             
            if (valDot.length > dotBit) 
            { 
                textbox.value = addThousandFlag(val.substring(0,val.indexOf('.'))) + '.' + valDot.substring(0,dotBit); 
                return; 
            } 
 
            dotBehind = val.substring(val.indexOf('.'),val.length); 
            val = val.substring(0,val.indexOf('.')); 
        } 
        else if (val.length >= intBit) 
        { 
            if (val.length > intBit) 
            { 
                val = val.substring(0,intBit); 
                val = addThousandFlag(val); 
            } 
            textbox.value = val + '.'; 
            return; 
        } 
 
        //val = noOtherInfoNumber; 
        textbox.value = addThousandFlag(val) + dotBehind; 
    } 
} 
 
 
//添加千分位号 
function addThousandFlag(val) 
{ 
    var strTemp = MONEY_FLAG; 
    if (val.length < 4) 
    { 
        return MONEY_FLAG + val; 
    } 
 
    var flag = false; 
    if (val.length % 3 != 0) 
    { 
        strTemp += val.substring(0,(val.length % 3)); 
    } 
    else 
        flag = true; 
 
    for(var i = val.length; i > 0; i = i - 1) 
    { 
        if (i % 3 != 0) 
        { 
            continue; 
        } 
         
        if (flag) 
        { 
            strTemp += val.substring(val.length - i,val.length - i + 3); 
            flag = false; 
        } 
        else 
        { 
            strTemp += THOUSAND_FLAG + val.substring(val.length - i,val.length - i + 3); 
        } 
    } 
 
    if (strTemp.indexOf(MONEY_FLAG) > 0) 
    { 
        strTemp = MONEY_FLAG + strTemp.replace(/¥/g,''); 
    } 
 
    return strTemp; 
} 
 
//判断是否是数字 
 
function isNumber(param) 
{ 
    return /\d/.test(String.fromCharCode(param)) ||  (param >= 96 && param <= 105);//加上小键盘处理 
 
} 4.AjaxSeachPage.aspx <% Page language="c#" Codebehind="AjaxSeachPage.aspx.cs" AutoEventWireup="false" Inherits="WebUI.AjaxSearchSystem.AjaxSeachPage" %> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > 
<HTML> 
    <HEAD> 
        <title>查询条件</title> 
        <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR"> 
        <meta content="C#" name="CODE_LANGUAGE"> 
        <meta content="JavaScript" name="vs_defaultClientScript"> 
        <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema"> 
        <base target="_self"> 
        <LINK href="BasicStyle.css" type="text/css" rel="stylesheet"> 
        <script language="javascript" src="AjaxSearchClientScript.js"> 
        </script> 
        <script language="javascript" src="Calendar.js"></script> 
    </HEAD> 
    <body  MS_POSITIONING="GridLayout"> 
        <form id="Form1" method="post" runat="server"> 
            <TABLE id="Table1"  101; LEFT: 0px; POSITION: absolute; TOP: 0px" cellSpacing="0" 
                cellPadding="0" width="100%" border="0"> 
                <TR> 
                    <TD  23px" align="center"><asp:button id="btnOK" runat="server" CssClass="redButtonCss" Text="确定"></asp:button><INPUT class="redButtonCss" type="button" value="取消" > 
                    </TD> 
                </TR> 
                <TR> 
                    <TD align="center"> 
                        <TABLE id="tbPanel" cellSpacing="0" borderColorDark="aliceblue" cellPadding="0" border="1"> 
                        </TABLE> 
                    </TD> 
                </TR> 
                <TR> 
                    <TD align="center"></TD> 
                </TR> 
            </TABLE> 
            <INPUT id="transValue"  102; LEFT: 8px; POSITION: absolute; TOP: 64px" type="hidden" 
                name="Hidden1" runat="server"> 
        </form> 
    </body> 
</HTML> 
 
AjaxSeachPage.aspx.cs 
using System; 
using System.Collections; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Web; 
using System.Web.SessionState; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.HtmlControls; 
using System.Text; 
 
namespace WebUI.AjaxSearchSystem 
{ 
    /// <summary> 
    /// AjaxSeachPage 的摘要说明。 
    /// </summary> 
    public class AjaxSeachPage : System.Web.UI.Page 
    { 
        protected System.Web.UI.HtmlControls.HtmlInputHidden transValue; 
        protected System.Web.UI.WebControls.Button btnOK; 
        public const string SEARCH_WHERE_SESSION = "SearchWhere"; 
     
        private void Page_Load(object sender, System.EventArgs e) 
        { 
            if (!IsPostBack) 
            { 
                try 
                { 
                    //tableName.Value = Request.QueryString["table"].Trim(); 
                    transValue.Value = "employee"; 
                } 
                catch(NullReferenceException ee) 
                { 
                    throw new ArgumentOutOfRangeException("table","参数不正确,请传入预先定义的表名"); 
                } 
             
 
                AjaxPro.Utility.RegisterTypeForAjax(typeof(AjaxSearchMethod)); 
             
                this.btnOK.Attributes.Add("OnClick","getCombinTerm()"); 
            } 
        } 
 
        #region Web 窗体设计器生成的代码 
        override protected void OnInit(EventArgs e) 
        { 
            // 
            // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。 
            // 
            InitializeComponent(); 
            base.OnInit(e); 
        } 
         
        /// <summary> 
        /// 设计器支持所需的方法 - 不要使用代码编辑器修改 
        /// 此方法的内容。 
        /// </summary> 
        private void InitializeComponent() 
        {     
            this.btnOK.Click += new System.EventHandler(this.btnOK_Click); 
            this.Load += new System.EventHandler(this.Page_Load); 
 
        } 
        #endregion 
 
        private void btnOK_Click(object sender, System.EventArgs e) 
        { 
            Session[SEARCH_WHERE_SESSION] = transValue.Value.Trim(); 
 
            Response.Write(ClosePage()); 
        } 
 
        private string ClosePage() 
        { 
            StringBuilder js = new StringBuilder(); 
            js.Append("<script language=\"JavaScript\">"); 
            js.Append("window.close();"); 
            js.Append("</script>"); 
            return js.ToString(); 
        } 
    } 
} 
 
运行效果: 
 
下载源码  
请大家提出宝贵意见,在此感谢我的同事 提供的帮助!感谢日历控件提供者meizz					
			
发布一个原创的基于Ajax的通用(组合)查询(续)
                    80酷酷网    80kuku.com 
       
  
 
 
  
