ASPxGridView后台嵌套

本文介绍了一个使用 DevExpress GridView 控件进行数据绑定的过程。该过程包括从数据库获取数据、设置 GridView 的各种属性来改善用户体验,以及创建自定义的 DetailGrid 模板以实现数据的分层显示。此外,还实现了数据格式化功能。
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using DevExpress.Web.ASPxGridView;
using DevExpress.Web.ASPxClasses;
using DevExpress.Data;
using XD.Common;
using System.Xml;
using System.Collections.Generic;
public partial class Master_MasterPage_QueryList: System.Web.UI.MasterPage
{
    protected void Page_Load(object sender, EventArgs e)
    {
        BandData();
    }
    protected void BandData()
    {
        XmlObject obj = XmlObject.Instance(xmlFile);
        Hashtable hash = XmlObject.GetSession("ColumnsShowOrNot_" + xmlFile) as Hashtable;
        List < string > lGroupCols = XmlObject.GetSession("strGroup_" + xmlFile) as List < string > ;
        string strQRY = "";
        strQRY = strMaster == string.Empty ? null : string.Format(strMaster, DropDownList_ConnectionString.Text, "#", strKeyone.Split('|')[0].ToString());
        DataTable dt = XD.DBUtility.DbHelperSQL.Query(strQRY).Tables[0];
        ASPxGridView1.KeyFieldName = "单位编码";
        ASPxGridView1.SettingsDetail.ShowDetailRow = true;
        ASPxGridView1.SettingsText.EmptyDataRow = "无数据";
        ASPxGridView1.SettingsLoadingPanel.Text = "数据加载中,请稍候..";
        ASPxGridView1.SettingsPager.Summary.Text = "  第{0}/{1}页(共{2}条)";
        ASPxGridView1.SettingsPager.PageSize = int.Parse(this.DropDownList_PageSize.Text);
        ASPxGridView1.Settings.ShowFooter = true;
        ASPxGridView1.SettingsBehavior.AllowFocusedRow = true;
        ASPxGridView1.DataSource = dt;
        ASPxGridView1.DataBind();
        XmlObject.SetSession("ChartSource", dt);
        if(!IsPostBack)
        {
            string[] summaryItem = sumByColumn.Split('|');
            for(int i = 0; i < summaryItem.Length; i++)
            {
                ASPxGridView1.TotalSummary.Add(SummaryItemType.Sum, summaryItem[i].ToString()).DisplayFormat = "{0:n}";
            }
            zz = new GridViewCommandColumn();
            zz.VisibleIndex = -1;
            zz.ClearFilterButton.Visible = true;
            zz.ClearFilterButton.Text = "清除";
            ASPxGridView1.Columns.Add(zz);
        }
        ASPxGridView1.Templates.DetailRow = new DetailGridTemplate();
        // ASPxGridView1.SortBy(ASPxGridView1.Columns["单位编码"], ColumnSortOrder.Ascending);
        ASPxGridView1.Columns[1].FixedStyle = GridViewColumnFixedStyle.Left;
        ASPxGridView1.Settings.ShowFilterRow = true;
        ASPxGridView1.SettingsDetail.AllowOnlyOneMasterRowExpanded = true;
        ASPxGridView1.Styles.AlternatingRow.Enabled = DefaultBoolean.True;
        ASPxGridView1.Width = 900;
        ASPxGridView1.Styles.AlternatingRow.BackColor = System.Drawing.Color.FromName("#e0f3f3");
        ASPxGridView1.Styles.Header.BackgroundImage.ImageUrl = "~/images/Gridbg.gif";
        ASPxGridView1.Styles.Header.Border.BorderStyle = BorderStyle.Solid;
        ASPxGridView1.Styles.Header.Border.BorderColor = System.Drawing.Color.Teal;
        ASPxGridView1.Styles.FocusedRow.BackColor = System.Drawing.Color.FromName("#8ab5b5");
        ASPxGridView1.Styles.Footer.BackColor = System.Drawing.Color.FromName("#c2d4d4");
        ASPxGridView1.Styles.LoadingPanel.BackColor = System.Drawing.Color.FromName("#8ab5b5");
        ASPxGridView1.CollapseAll();
        //ASPxGridView1.SettingsLoadingPanel;
        //ASPxGridView1.DetailRows.ExpandRow(0);//第一行展开    
    }
}
public class DetailGridTemplate: ITemplate
{
    Control parent;
    object masterKey;
    ASPxGridView detailGrid;
    public void InstantiateIn(Control container)
    {
        parent = container;
        masterKey = ((GridViewDetailRowTemplateContainer) parent).KeyValue;
        CreateDetailGrid();
    }
    private void CreateDetailGrid()
    {
        detailGrid = new ASPxGridView();
        detailGrid.ID = "detailGrid";
        //detailGrid.AutoGenerateColumns = false;
        //在模板中追加detailGrid控件
        parent.Controls.Add(detailGrid);
        //创建明细Grid列 方法
        //CreateDetailColumns(detailGrid);
        //detailGrid.KeyFieldName = "单位名称";
        //指定明细数据源,这里可以根据上面取得的masterKey 作为明细数据源的参数
        //通过自定GetDetailDataSource()方法取得
        //detailGrid.SettingsBehavior.AllowFocusedRow = true;
        DataTable dt = CompareData(HttpContext.Current.Session["xmlFileName"].ToString(), GetDetailDataSource(masterKey));
        //dt.Columns.Remove("总数");
        //-----------------------------记录生成报表SQL语句-----------------------------------//
        //XmlObject.SetSession("strSQL_" + HttpContext.Current.Session["xmlFileName"].ToString(),GetSqlString().Replace(HttpContext.Current.Session["strKey"].ToString(),""));
        //--------------------------------------记录生成Excel表----------------------------//
        //DataTable dtNew=XD.DBUtility.DbHelperSQL.Query(GetSqlString().Replace(HttpContext.Current.Session["strKey"].ToString(),"")).Tables[0];
        //dtNew.Columns.Remove("总数");
        detailGrid.DataSource = dt.DefaultView;
        detailGrid.SettingsText.EmptyDataRow = "无子单位数据^o^";
        detailGrid.KeyFieldName = "单位编码";
        detailGrid.DataBind();
        detailGrid.Settings.ShowFilterRow = true;
        detailGrid.Settings.ShowHorizontalScrollBar = true;
        detailGrid.SettingsDetail.ShowDetailRow = true;
        detailGrid.SettingsPager.Summary.Text = "  第{0}/{1}页(共{2}条)";
        detailGrid.Width = 900;
        detailGrid.SettingsDetail.IsDetailGrid = true;
        detailGrid.SettingsLoadingPanel.Text = "数据加载中,请稍候..";
        detailGrid.Settings.ShowFooter = true;
        detailGrid.Styles.AlternatingRow.Enabled = DefaultBoolean.True;
        detailGrid.SettingsDetail.AllowOnlyOneMasterRowExpanded = true;
        detailGrid.SettingsDetail.ShowDetailButtons = true;
        detailGrid.Styles.AlternatingRow.BackColor = System.Drawing.Color.FromName("#e0f3f3");
        detailGrid.Styles.Header.BackgroundImage.ImageUrl = "~/images/Gridbg.gif";
        detailGrid.Styles.Header.Border.BorderStyle = BorderStyle.Solid;
        detailGrid.Styles.Header.Border.BorderColor = System.Drawing.Color.Teal;
        detailGrid.Styles.FocusedRow.BackColor = System.Drawing.Color.FromName("#8ab5b5");
        detailGrid.Styles.Footer.BackColor = System.Drawing.Color.FromName("#c2d4d4");
        detailGrid.Styles.LoadingPanel.BackColor = System.Drawing.Color.FromName("#8ab5b5");
        detailGrid.Border.BorderColor = System.Drawing.Color.Teal;
        detailGrid.DetailRowExpandedChanged += new ASPxGridViewDetailRowEventHandler(detailGrid_DetailRowExpandedChanged);
        //追加明细Grid更新事件
        //detailGrid.RowUpdating += new DevExpress.Web.Data.ASPxDataUpdatingEventHandler(detailGrid_RowUpdating);
        // 类似可追加 RowDeleting 和 RowInserting
    }
    void detailGrid_DetailRowExpandedChanged(object sender, ASPxGridViewDetailRowEventArgs e)
        {
            // HttpContext.Current.Response.Write(e.VisibleIndex.ToString());
            DataRowView row = (DataRowView)((ASPxGridView) sender).GetRow(e.VisibleIndex);
            string strID = row.DataView.Table.Rows[e.VisibleIndex][1].ToString();
            string strkeyTemp = HttpContext.Current.Session["strKey"].ToString();
            string strsqls = "select 1 from Sys_DataField where DfParentCode='{0}'";
            DataTable dtss = XD.DBUtility.DbHelperSQL.Query(string.Format(strsqls, strID)).Tables[0];
            if(dtss.Rows.Count == 0)
            {
                ((ASPxGridView) sender).Templates.DetailRow = new DetailGridTemplateFou();
                HttpContext.Current.Session["strKey"] = HttpContext.Current.Session["strKeyTwo"].ToString();
                HttpContext.Current.Session["Flag"] = "1";
            }
            else
            {
                ((ASPxGridView) sender).Templates.DetailRow = new DetailGridTemplateOne();
                HttpContext.Current.Session["strKey"] = strkeyTemp;
                HttpContext.Current.Session["Flag"] = "0";
            }
        }
        /// <summary>
        /// 对detail内数据格式化
        /// </summary>
        /// <param name="xmlfile"></param>
        /// <param name="dt"></param>
        /// <returns></returns>
    protected DataTable CompareData(string xmlfile, DataTable dt)
    {
        XmlDocument doc = new XmlDocument();
        doc.Load(HttpContext.Current.Server.MapPath("~/App_Data/" + xmlfile));
        XmlNodeList columnList = doc.SelectNodes("/table/columns/column");
        XmlObject obj = XmlObject.Instance(xmlfile);
        foreach(DataColumn DcolName in dt.Columns)
        {
            foreach(XmlNode node in columnList)
            {
                if(node.SelectSingleNode("cnName").InnerText == DcolName.ColumnName && node.SelectSingleNode("type").InnerText == "double")
                {
                    for(int i = 0; i < dt.Rows.Count; i++)
                    {
                        if(dt.Rows[i][DcolName.ColumnName].ToString() != "")
                        {
                            dt.Rows[i][DcolName.ColumnName] = string.Format("{0:n}", decimal.Parse(dt.Rows[i][DcolName.ColumnName].ToString()));
                        }
                    }
                }
            }
        }
        return dt;
    }
    protected DataTable CompareDataFromCS(DataTable dt)
    {
        for(int i = 0; i < dt.Rows.Count; i++)
        {
            decimal b = 0;
            foreach(DataColumn DcolName in dt.Columns)
            {
                dt.Rows[i][DcolName.ColumnName] = decimal.TryParse(dt.Rows[i][DcolName.ColumnName].ToString(), out b) ? string.Format("{0:n}", b) : dt.Rows[i][DcolName.ColumnName].ToString();
            }
        }
        return dt;
    }
    private DataTable GetDetailDataSource(object masterKey)
    {
        return XD.DBUtility.DbHelperSQL.Query(string.Format(HttpContext.Current.Session["strMaster"].ToString(), HttpContext.Current.Session["DropDownList_ConnectionString"].ToString(), (string) masterKey, HttpContext.Current.Session["strKeyOne"].ToString().Split('|')[1].ToString())).Tables[0];
    }
    public string GetSqlString()
    {
        return "";
    }
}

一、 基本使用方法 4 1.导入Dll文件 4 2.Asp.Net页面控件注册 4 3. Asp.Net页面控件声明 5 4.删除licenses.licx协议文件(盗版) 5 5.功能概述 5 二、 绑定数据(单层) 5 1.使用DataSource属性绑定DataTable 5 2.使用DataSourceID属性绑定SqlDataSource 6 3.使用DataSourceID属性绑定ObjectDataSource 6 4.使用DataSourceID属性绑定LinqDataSource 9 5.使用DataSourceID属性绑定XmlDataSource 10 三、 绑定数据(嵌套树) 10 1.主从数据绑定 10 四、 客户端行维护(新增、修改、删除等) 12 1.编辑状态 12 2.新增 13 3.修改 13 4.删除 13 五、 服务器端行维护(新增、修改、删除等) 13 1.编辑状态 13 2.新增 13 3.修改 15 4.删除 16 六、 数据保存 17 七、 客户端行选择 17 1.选择页面上所有行 17 2.选中指定行或所有行 18 3.获取选中行 18 4.取消页面上所有行的选择 19 5.取消指定行或所有行的选择 19 八、 服务器端行选择 19 1.可选择性设置 19 2.Selection属性 19 九、 客户端行定位 20 1.将焦点转移到编辑行的指定列 20 2.获取焦点行号 20 3.将某行置为可见(未验证) 20 4.跳转到指定页 20 十、 服务器端行定位 21 1.焦点行 21 2.将某行置为可见 21 3.跳转到指定页 21 十一、 客户端数据搜索 21 1.数据过滤 21 十二、 服务端数据搜索 22 1.数据过滤 22 2.数据搜索 22 十三、 分页 23 1.分页条相关属性 23 2.更改分页条按钮属性 26 3.与分页相关操作 26 十四、 客户端排序 26 1.使用SortBy方法排序 26 十五、 服务器端排序 27 1.排序设置 27 2.使用SortBy方法排序 27 3.直接操作GridViewDataColumn排序 28 4.使用GetSortedColumns方法取排序栏位 28 十六、 服务器端数据分组 28 1.数据分组的前提条件 28 2.使用GroupBy方法实现数据分组 28 3.分组的展开与折叠 29 4.判断分组行是否展开 29 5.数据分组的相关设置 29 6.按分组值排序 30 十七、 客户端数据分组 30 1.使用GroupBy方法实现数据分组 30 2.分组的展开与折叠 30 3.判断分组行是否展开 31 4.判断是分组行还是数据行 31 5.用户拖动栏位到分组带实现分组 31 十八、 数据导出 31 1.内置数据导出的前提条件 31 2.支持的数据导出类型 32 3. ASPxGridViewExporter重要属性 32 4.主从ASPxGridView数据导出 32 5.导出到Pdf时中文乱码问题的解决 33 十九、 报表打印 33 二十、 懒加载 33 二十一、 客户端栏位取值与赋值 33 1.使用GetPageRowValues取当前页指定栏位值 33 2.使用GetRowValues取指定行指定栏位值 34 3.使用GetSelectedFieldValues取选中行指定栏位值 34 4.取栏位实例 34 5.使用GetColumnsCount取栏位总数 34 6.使用MoveColumn隐藏和移动栏位 34 7. 使用GetRowKey取行主键值 35 二十二、 服务器端栏位取值与赋值 35 1.取行值 35 2.取列值 36 二十三、 栏位编辑风格 38 1.AspxGridView栏位类型 38 2.GridViewColumn服务器端重要属性 38 3.GridViewColumn服务器端方法 40 4.GridViewCommandColumn:命令按钮列 41 5. GridViewDataColumn:基本数据列 42 6.GridViewDataButtonEditColumn:编辑按钮列 45 7.GridViewDataCheckColumn: 复选框列 45 8.GridViewDataTextColumn:文本列 45 二十四、 栏位格式化 45 二十五、 固定列 45 二十六、 栏位拖动 45 二十七、 栏位合计 46 二十八、 栏位初始值 46 二十九、 栏位可编辑性 46 三十、 栏位数据校验 46 1.行数据校验(编辑状态) 46 三十一、 客户端事件 49 三十二、 服务器端事件 49 1.服务器事件索引 49 2.AutoFilterCellEditorCreate 49 3.AutoFilterCellEditorInitialize 50 4.BeforeGetCallbackResult 50 5.BeforePerformDataSelect 51 6.CancelRowEditing 51 7. CellEditorInitialize 51 7. ClientLayout 52 8. CustomButtonCallback 52 9. CustomCallback 53 10. CustomColumnDisplayText 54 11. CustomColumnGroup 54 12. CustomColumnSort 55 13. CustomDataCallback 56 14. CustomErrorText 57 15. CustomGroupDisplayText 57 16. CustomJSProperties 58 17. CustomSummaryCalculate 58 三十三、 快捷键 59 三十四、 样式 59 1.GridViewStyles重要属性 59 2. GridViewAlternatingRowStyle重要属性 59 三十五、 AspxGridView服务器端重要属性 60 三十六、 AspxGridView服务器端重要方法 60 三十七、 GridViewColumnCollection服务器端重要属性 61 三十八、 AspxGridView客户端重要属性 61 三十九、 AspxGridView客户端常用方法 64 1.PerformCallback 77 四十、 AspxGridView客户端非常用方法 78 四十一、 ASPxClientGridViewColumn(客户端栏位)常用属性 79 四十二、 嵌套AspxGridView的特殊控制 80 1.控制在同一时间只允许一行展开 80 2.SettingsDetail属性设置 80 3.嵌套AspxGridView树展开与折叠(客户端) 80 四十三、 AspxGridView客户端源代码可借鉴点 81 四十四、 AspxGridView服务器端源代码可借鉴点 81
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值