1. 程式人生 > >datagrid動態生成列

datagrid動態生成列

Oracle將資料進行行轉列:http://blog.csdn.net/u013533810/article/details/37956195

1、程式中的條件引數

                    string WhereStr = context.Request["WhereStr"].ToString();
                    string ColumnsStr = context.Request["ColumnsStr"].ToString();
                    PrisonPM.Model.Row_To_Col model = new Model.Row_To_Col();
                    model.tabname = "VW_DAYRPT_STDTSK_R";
                    if (string.IsNullOrEmpty(ColumnsStr))
                    {
                        model.group_col = "DPTKEY";
                    }
                    else 
                    {
                        model.group_col = "DPTKEY," + ColumnsStr;
                    }
                    
                    model.column_col = "DAYRPTDATE";
                    model.value_col = "PRODTIME";
                    model.Aggregate_func = "Sum";
                    model.colorder = "DAYRPTDATE asc";
                    model.roworder = "DPTKEY asc";
                    model.when_value_null = "";
                    model.where_str = WhereStr;
                    model.rowcount_str = "合計";

                    PrisonPM.BLL.PublicReport BLL = new BLL.PublicReport();

                    DataSet ds = BLL.Sp_BookStdtskReport(model);
                    strR=JSONhelper.GetAsyncDataGridData(ds.Tables[0]);

2、程式中呼叫Oracle中的函式
public DataSet Sp_BookStdtskReport(PrisonPM.Model.Row_To_Col model)
        {
            OracleParameter Cursor = new OracleParameter();
            Cursor.ParameterName = "cur";
            Cursor.OracleType = OracleType.Cursor;
            Cursor.Direction = System.Data.ParameterDirection.Output;
            OracleParameter[] parameters = { 
                                               new OracleParameter("tabname",OracleType.VarChar,200),
                                               new OracleParameter("group_col",OracleType.VarChar,2000),
                                               new OracleParameter("column_col",OracleType.VarChar,200),
                                               new OracleParameter("value_col",OracleType.VarChar,200),
                                               new OracleParameter("Aggregate_func",OracleType.VarChar,200),
                                               new OracleParameter("colorder",OracleType.VarChar,200),
                                               new OracleParameter("roworder",OracleType.VarChar,200),
                                               new OracleParameter("when_value_null",OracleType.VarChar,200),
                                               new OracleParameter("where_str",OracleType.VarChar,2000),
                                               new OracleParameter("rowcount_str",OracleType.VarChar,200),
                                               Cursor
                                           };
            parameters[0].Value = model.tabname;
            parameters[1].Value = model.group_col;
            parameters[2].Value = model.column_col;
            parameters[3].Value = model.value_col;
            parameters[4].Value = model.Aggregate_func;
            parameters[5].Value = model.colorder;
            parameters[6].Value = model.roworder;
            parameters[7].Value = model.when_value_null;
            parameters[8].Value = model.where_str;
            parameters[9].Value = model.rowcount_str;
            return PrisonPM.DBUtility.DbHelperOra.RunProcedure("PKG_STM_GETDATA_TABLE.Sp_Row_To_Col", parameters, "report");
        }
3、將資料轉換成JSON型別
        public static string GetAsyncDataGridData(DataTable dt)
        {
            StringBuilder sb = new StringBuilder();
            //生成資料JSON
            JavaScriptSerializer jss = new JavaScriptSerializer();
            System.Collections.ArrayList dic = new System.Collections.ArrayList();
            foreach (DataRow dr in dt.Rows)
            {
                System.Collections.Generic.Dictionary<string, object> drow = new System.Collections.Generic.Dictionary<string, object>();
                foreach (DataColumn dc in dt.Columns)
                {
                    drow.Add(dc.ColumnName, dr[dc.ColumnName]);
                }
                dic.Add(drow);

            }
            //生成列名JSON
            sb.Append("[");
            foreach (DataColumn dc in dt.Columns)
            {
                sb.Append("{");
                sb.Append(string.Format("\"field\":\"{0}\",",dc.ColumnName));
                sb.Append(string.Format("\"title\":\"{0}\",", dc.ColumnName));
                sb.Append(string.Format("\"width\":\"{0}\",", 80));
                sb.Append(string.Format("\"align\":\"{0}\"","center"));
                sb.Append("},");
            }
            if (sb.ToString().EndsWith(","))
            {
                sb.Remove(sb.Length - 1, 1);
            }
            sb.Append("]");

            return "{\"total\":" + dt.Rows.Count + ",\"rows\":" + jss.Serialize(dic) +",\"columns\":"+sb.ToString()+ "}";
        }
4、前臺介面佈局
    <script type="text/javascript" language="javascript">
        $(function () {
            $('#Combo_DPT').combobox({
                url: '../PublicData/GetWorkShopData.aspx',
                valueField: 'DPTKEY',
                textField: 'DPTNAME'
            });
            $('#tt').datagrid({
                width: 600,
                height: 600,
                fit: true,
                toolbar: '#toolbar',
                rownumbers: true, //行號
                singleSelect: true, //單行選取  
                pagination: false, //顯示分頁               
                columns: [[]]
            });
            $('#txt_Colomns').combobox({
                url: "../Handler/STM/Stm_Menu.ashx?flag=txt_Colomns",
                multiple: true,
                valueField: 'COLUMN_NAME',
                textField: 'COLUMN_NAME'
            });


        });
        function WhereStr() {
            var WhereStr = " Where 1=1";
            if ($("#Combo_DPT").combobox("getValue")) {
                WhereStr = WhereStr + " and DPTKEY=" + $("#Combo_DPT").combobox("getValue");
            }
            if ($("#txt_LABOURCODE").val()) {
                WhereStr = WhereStr + " and LABOURCODE like'%" + $("#txt_LABOURCODE").val() + "%'";
            }
            if ($("#txt_LABOURNAME").val()) {
                WhereStr = WhereStr + " and LABOURNAME like'%" + $("#txt_LABOURNAME").val() + "%'";
            }
            if ($("#txt_PARTMCODE").val()) {
                WhereStr = WhereStr + " and PARTMCODE like'%" + $("#txt_PARTMCODE").val() + "%'";
            }

            return WhereStr;
        }

        function Fn_Search() {
            var ColumnsName = $("#txt_Colomns").combobox("getValues");
            var ColumnsStr = JSON.stringify(ColumnsName);
            ColumnsStr = ColumnsStr.substring(1, ColumnsStr.length - 1).replace(/\"/g, ""); ;
            $.ajax({
                url: '../Handler/STM/Stm_Menu.ashx?flag=ssssss&rand=' + Math.random(),
                type: "POST",
                dataType: "JSON", //可以為Json
                data: { WhereStr: WhereStr(), ColumnsStr: ColumnsStr },
                success: function (data) {
                    $('#tt').datagrid({ columns: [data.columns] }).datagrid("loadData", data);
                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    //window.parent.frameReturnByMes("提交失敗2");
                    return;
                }
            });
        }
    </script>
</head>
<body>
    <table id="tt">
    </table>
    <div id="toolbar">
        所在車間:<input id="Combo_DPT" class="easyui-combobox" />
        客戶款號:<input id="txt_PARTMCODE" class="textbox" />
        員工編號:<input id="txt_LABOURCODE" class="textbox" />
        員工姓名:<input id="txt_LABOURNAME" class="textbox" />
        顯示欄位:<input id="txt_Colomns" class="easyui-combobox" />
        <a href="#" class="easyui-linkbutton" iconcls="icon-search" onclick="Fn_Search()"
            plain="false">查詢</a>
    </div>
</body>