LIst<model>或者datatble 拼成table,并固定表头和列

//页面初始化 加载 JS函数	

//调整 浏览器 表格的显示宽度  以及 调用  锁定 表头和列  的JS函数。
function cloneTableHeader_Width(TableID) {
    //document.body.clientWidth获得客户区域(浏览器窗口,不包括菜单栏和状态栏,就是内容窗口)的宽度 - 35像素的滚动条宽度。
    var myTable_Width = (document.body.clientWidth - 35);

    //alert(myTable_Width);//测试屏幕宽度
    if ((document.body.clientWidth - 35) < 855) {
        myTable_Width = 855; //宽度
    }
    FixTable2(TableID, 2, myTable_Width, 400);
}

function FixTable2(TableID, FixColumnNumber, width, height) {
    /// <summary>
    ///     锁定表头和列
    ///     <para> http://blog.csdn.net/SongYanJun2011 </para>
    /// </summary>
    /// <param name="TableID" type="String">
    ///     要锁定的Table的ID
    /// </param>
    /// <param name="FixColumnNumber" type="Number">
    ///     要锁定列的个数
    /// </param>
    /// <param name="width" type="Number">
    ///     显示的宽度
    /// </param>
    /// <param name="height" type="Number">
    ///     显示的高度
    /// </param>

    if ($("#" + TableID + "_tableLayout").length != 0) {
        $("#" + TableID + "_tableLayout").before($("#" + TableID));
        $("#" + TableID + "_tableLayout").empty();
    }
    else {
        $("#" + TableID).after("<div id='" + TableID + "_tableLayout' style='overflow:hidden;height:" + height + "px; width:" + width + "px;'></div>");
    }
    $('<div id="' + TableID + '_tableFix"></div>'
            + '<div id="' + TableID + '_tableHead"></div>'
            + '<div id="' + TableID + '_tableColumn"></div>'
            + '<div id="' + TableID + '_tableData" class="scroll"></div>').appendTo("#" + TableID + "_tableLayout");
    var oldtable = $("#" + TableID);
    var tableFixClone = oldtable.clone(true);
    tableFixClone.attr("id", TableID + "_tableFixClone");
    $("#" + TableID + "_tableFix").append(tableFixClone);
    var tableHeadClone = oldtable.clone(true);
    tableHeadClone.attr("id", TableID + "_tableHeadClone");
    $("#" + TableID + "_tableHead").append(tableHeadClone);
    var tableColumnClone = oldtable.clone(true);
    tableColumnClone.attr("id", TableID + "_tableColumnClone");
    $("#" + TableID + "_tableColumn").append(tableColumnClone);
    $("#" + TableID + "_tableData").append(oldtable);
    $("#" + TableID + "_tableLayout table").each(function () {
        $(this).css("margin", "0");
    });
    var HeadHeight = $("#" + TableID + "_tableHead thead").height();
    HeadHeight += 2;
    $("#" + TableID + "_tableHead").css("height", HeadHeight);
    $("#" + TableID + "_tableFix").css("height", HeadHeight);
    var ColumnsWidth = 0;
    var ColumnsNumber = 0;
    $("#" + TableID + "_tableColumn tr:last td:lt(" + FixColumnNumber + ")").each(function () {
        ColumnsWidth += $(this).outerWidth(true);
        ColumnsNumber++;
    });
    ColumnsWidth += 2;
    if ($.browser.msie) {
        switch ($.browser.version) {
            case "7.0":
                if (ColumnsNumber >= 3) ColumnsWidth--;
                break;
            case "8.0":
                if (ColumnsNumber >= 2) ColumnsWidth--;
                break;
        }
    }
    $("#" + TableID + "_tableColumn").css("width", ColumnsWidth);
    $("#" + TableID + "_tableFix").css("width", ColumnsWidth);
    $("#" + TableID + "_tableData").scroll(function () {
        $("#" + TableID + "_tableHead").scrollLeft($("#" + TableID + "_tableData").scrollLeft());
        $("#" + TableID + "_tableColumn").scrollTop($("#" + TableID + "_tableData").scrollTop());
    });
    $("#" + TableID + "_tableFix").css({ "overflow": "hidden", "position": "relative", "z-index": "50", "background-color": "Silver" });
    $("#" + TableID + "_tableHead").css({ "overflow": "hidden", "width": width - 17, "position": "relative", "z-index": "45", "background-color": "Silver" });
    $("#" + TableID + "_tableColumn").css({ "overflow": "hidden", "height": height - 17, "position": "relative", "z-index": "40", "background-color": "Silver" });
    $("#" + TableID + "_tableData").css({ "overflow": "scroll", "width": width, "height": height, "position": "relative", "z-index": "35" });
    if ($("#" + TableID + "_tableHead").width() > $("#" + TableID + "_tableFix table").width()) {
        $("#" + TableID + "_tableHead").css("width", $("#" + TableID + "_tableFix table").width());
        $("#" + TableID + "_tableData").css("width", $("#" + TableID + "_tableFix table").width() + 17);
    }
    if ($("#" + TableID + "_tableColumn").height() > $("#" + TableID + "_tableColumn table").height()) {
        $("#" + TableID + "_tableColumn").css("height", $("#" + TableID + "_tableColumn table").height());
        $("#" + TableID + "_tableData").css("height", $("#" + TableID + "_tableColumn table").height() + 17);
    }
    $("#" + TableID + "_tableFix").offset($("#" + TableID + "_tableLayout").offset());
    $("#" + TableID + "_tableHead").offset($("#" + TableID + "_tableLayout").offset());
    $("#" + TableID + "_tableColumn").offset($("#" + TableID + "_tableLayout").offset());
    $("#" + TableID + "_tableData").offset($("#" + TableID + "_tableLayout").offset());
}

  异步获得数据List<model>或者datatable,拼成html的table

var arryTxtAlign = "";
var param; //参数对象
var th1 = "";
var th2 = "";
var trList1 = ""; //固定列
var trList2 = ""; //不固定的列
FixTable = function () {
    var _this = this;
    $("#" + param.DivID).append('<img src="../../Content/Images/loading.gif" style="position:absolute; left:400px; top:200px;">');
    _this.GetTable = function () {
        $.ajax({
            type: "get",
            url: param.Url,
            data: param.Where,
            contentType: "application/json; charset=utf-8",  //WebService 会返回Json类型   charset=utf-8             
            dataType: "json",
            success: function (tbObj, textStatus) {
                if (tbObj == undefined || tbObj.length == 0) {
                    $("#" + param.DivID).html('');
                    return false;
                }
                else {
                    param.Model = tbObj;
                    Success();
                }
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                $("#" + param.DivID).html('');
                alert("没有数据!"); // the options for this ajax request
            }
        });
    };
    Success = function () {
        if (param.thTitle == "")
            getColName();
        var tableCss = param.tbClass == null ? 'mainTable' : param.tbClass;
        var th = GetHead();
        var tbody = SetRow();        //普通列
        var table = "<table id='t_fix' border='1' cellspacing='0' cellpadding='0' class='" + tableCss + " transparent_class'>" + th + tbody + "</table>";
        $("#" + param.DivID).html(table);
        cloneTableHeader_Width("t_fix");
    }
    getColName = function () {
        var arry = new Array();
        i = 1;
        arry[0] = "序号";
        if (param.Model[0] == undefined)
            return false;
        $.each(param.Model[0], function (colName, thValue) {
            arry[i] = colName;
            i = i + 1;
        });
        param.thTitle = arry;
    }
    GetHead = function () {
        var tr = "<thead><tr>{0}</tr></thead>";
        var title = "";
        var css = "";
        var txt = "";
        var isSort = "0";
        var tdIndex = -1; //实际的行号
        //var orderby = "{0}:{1}"; //i,name
        for (var tdNum = 0; tdNum < param.thTitle.length; tdNum++) {
            colName = param.thTitle[tdNum].Value;
            colName = colName == undefined ? param.thTitle[tdNum] : colName;
            //-----------------内容左右中对齐
            if (param.TextAlign[tdNum] != null)
                arryTxtAlign += ";" + param.TextAlign[tdNum];
            else if (colName.toLowerCase().indexOf('id') >= 0 || colName.toLowerCase().indexOf('代码') >= 0)//默认对齐
                arryTxtAlign += ";" + "left";
            else
                arryTxtAlign += ";"
            if (param.HasHide[tdNum] != null && param.HasHide[tdNum] == "hide")
                continue;
            tdIndex += 1;
            title += getThOne(tdNum, colName);
            //-------------字段排序
            // $("#hidColName").val($("#hidColName").val() + "," + orderby.format(tdNum, colName));
        }
        var head = tr.format(title);
        return head;
    };

    getThOne = function (tdNum, colName) {
        var thText = "<a href='#' onclick='SetSort(\"{0}\");' title='{0}'>{0}</a>";
        var sort = param.sort + ",";
        if (colName != "序号")//有定义
        {
            thText = thText.format(colName);
        }
        else
            thText = colName; //需要列明访问td值

        thHtml = "<th scope='col' class='{0}'> {1} </th>".format("th" + tdNum + 1, thText);
        return thHtml;
    };

    //得到普通行
    SetRow = function () {
        var trHTML = "<tr class='{0}'>{1}</tr>";
        var tbody = "";
        $.each(param.Model, function (trNum, obj) {
            var id = 0;
            var tr = "";
            for (var tdNum = 0; tdNum < param.thTitle.length; tdNum++) {
                var td = "";
                var colName = param.thTitle[tdNum].Value;
                colName = colName == undefined ? param.thTitle[tdNum] : colName;
                var tdValue = "没这个字段";
                var key = colName;
                if (obj.hasOwnProperty(key))
                    tdValue = obj[key];
                if (param.HasHide[tdNum] != null && param.HasHide[tdNum] == "hide")
                    continue;
                if (tdNum == 0) {
                    td = SetRowOne(tdNum, "序号", trNum + 1);
                    id = tdValue;
                }
                else
                    td = SetRowOne(tdNum, colName, tdValue);
                tr += td;
            }
            tbody += trHTML.format(trNum % 2 == 0 ? "trEven" : "trOdd", tr);
        });
        return tbody;
    }
    //设置单元格
    SetRowOne = function (tdNum, colName, tdText) {
        tdHtml = "<td  class='{0}'style='text-align:{1}' > {2} </td>"
                        .format("td" + tdNum//tdNum % 2 == 0 ? "tdEven" : "tdOdd"//偶奇数列样式名
                                , GetTextAlign(colName, tdNum, arryTxtAlign)//左右对齐
                                , tdText == "" && tdText != 0 ? "--" : GetText(tdNum, tdText, colName));
        return tdHtml;
    }

    function GetTextAlign(txt, i, strTextAlign) {
        var list = strTextAlign.split(";");
        re = /^(\d{4})-(\d{2})-(\d{2})$/g;
        if (list[i + 1] != "")
            return list[i + 1];
        if (!isNaN(txt))
            return "right";
        else if (re.test(txt) || txt == '--')//判断日期格式符合YYYY-MM-DD
            return "center";
        else
            return "left";
    }

    function GetText(tdNum, txt, colName) {
        if (checkNull(txt))
            return "";
        if (param.Enum[tdNum] != null) {
            var Enum = TrimAll(param.Enum[tdNum].toString())
            var iStart = Enum.indexOf(txt + "=") + (txt + "=").length - 1;
            var iEnd = Enum.indexOf(',', iStart);
            if (iEnd == -1) iEnd = Enum.length + 1;
            txt = Enum.substring(iStart + 1, iEnd);
            return txt;
        }
        else {

            var checkName = "序号,id,所属机构";
            if (checkName.indexOf(colName.toLowerCase()) < 0
                                 && !isNaN(txt)
                                 && colName.toLowerCase().indexOf('代码') < 0
                                 && colName.toLowerCase().indexOf('内码') < 0
                                 && colName.toLowerCase().indexOf('日期') < 0)
                return fmoney(txt, 2);
            else
                return txt;
        }
    }
}

FixTable.GetHead = function (thTitle) {
    var tr = "<div class='t_box'><table class='mainTable2' width='100%'><tr style='background-color:#54A545;'>{0}</tr></table></div>";
    var title = "";
    var css = "";
    var txt = "";
    var isSort = "0";
    var tdIndex = -1; //实际的行号
    var orderby = "{0}:{1}"; //i,name
    for (var i = 0; i < thTitle.length; i++) {
        colName = thTitle[i].Value;
        colName = (i == 0 ? "序号" : colName);
        tdIndex += 1;
        title += thHtml = "<th scope='col' class='{0}' style=' white-space: nowrap;'>{1}</th>".format("th" + i, colName); ;
    }
    var head = tr.format(title);
    return head;
};

FixTable.BindDT = function (data) {
    //--初始化
    arryTxtAlign = "";
    th1 = "";
    th2 = "";
    trList1 = ""; //固定列
    trList2 = ""; //不固定的列
    ///
    param = new Array();
    param.Model = null; //list<model>
    param.Url = data[0]; ; //list<model>
    param.Where = data[1]; ; //list<model>
    param.DivID = data[2]; // 表显示的地方k
    param.tbClass = data[3]; //主表样式
    param.thTitle = data[4]; //.replace(data[3].substring(0, data[3].indexOf(',')), "序号");  //表头
    param.colEvent = data[5];  //表头事件,如排序
    param.HasHide = data[6];  //隐藏的列
    param.TextAlign = data[7]; //每个列的内容的左右对其   
    param.Enum = data[8]; //{ "0": "0=总账,1=分账"}//列的枚举,如第1列“0”代表“正常”
    param.FixColNum = data[9];
    param.EditURl = data[10]; //编辑按钮事件
    param.Deleteurl = data[11]; //删除按钮事件
    var ajax = new FixTable();
    ajax.GetTable(param); //调用ajax异步调用方法
}
function Delete(id, obj) {
    $.post(param.Deleteurl == null ? 'Delete' : param.Deleteurl, { "id": id }, function (tbObj) {
        alert("删除成功");
        $(obj).parent().parent().remove();
    });
}
//排序
function SetSort(colName) {

    if (param.Where.sort == undefined || param.Where.sort == "") {
        param.Where.sort = "[{0}]:{1}".format(colName, "desc");
        where.sort = "[{0}]:{1}".format(colName, "desc");
    }
    else {
        listSort = param.Where.sort.split(':');
        param.Where.sort = "[{0}]:{1}".format(colName, listSort[1] == "desc" ? "" : "desc");
        where.sort = "[{0}]:{1}".format(colName, listSort[1] == "desc" ? "" : "desc");
    }
    var ajax = new FixTable();
    ajax.GetTable(param); //调用ajax异步调用方法
};

  

posted @ 2014-01-27 14:46  那缕阳光  阅读(630)  评论(0编辑  收藏  举报