zoukankan      html  css  js  c++  java
  • 读书笔记 UltraGrid(10)

    关于绑定dataset

    1.如果DataSet中建立了关系,则ultragrid中自动以dataset中的关系展示层次性的数据。
    SqlDataAdapter da = new SqlDataAdapter("select * from customers;select * from pdctorders;select * from SaleContracts;", cnnstring);
    da.TableMappings.Add("Table", "客户");
    da.TableMappings.Add("Table1", "订单");
    da.TableMappings.Add("Table2", "合同");
    da.Fill(data);

    DataRelation mydr = new DataRelation("Customers_PdctOrders", data.Tables["客户"].Columns["CustID"], data.Tables["订单"].Columns["CustID"], false);
    data.Relations.Add(mydr);
    DataRelation mydr2 = new DataRelation("Customers_SaleContracts", data.Tables["客户"].Columns["CustID"], data.Tables["合同"].Columns["CustID"], false);
    data.Relations.Add(mydr2);
    我们查看ultraGrid1.DisplayLayout.Bands,发现共有3个UltraGridBand,key分别是“客户”、“Customers_PdctOrders”和"Customers_SaleContracts";
    也就是ultraGrid1.DisplayLayout.Bands包含所有的band。
    关于key,除最顶层外,其余的名字都取自DataRelation的名字;
    为什么要有一个Bands体现所有的band呢?似乎为了访问的方便性?
    顶层的band,即ultraGrid1.DisplayLayout.Bands[0]只能有一个且必须有一个!
    2.ultraGrid1.DisplayLayout.Bands中band之间的关系通过ParentBand来体现。
    如果是顶层band则ParentBand为空;
    从关系上来看,band是没有childband的,childband是属于ultrarow的,并且一个ultrarow可以由几个childband;
    3.总是觉得SqlDataAdapter da = new SqlDataAdapter("select * from customers;select * from pdctorders;select * from SaleContracts;", cnnstring);这样执行不是将三个表中所有的数据都给检索出来了?
    是否可以只在行展开的时候再检索数据呢?
    当然这样做childband上的数据是不全的。排序等方面应该禁止吧。
    可以在 ultraGrid1中BeforeRowExpanded事件中写入如下代码:
    string custID=e.Row.Cells["CustID"].Value .ToString ();
    //考虑多次展开不能有重复数据,每次都从数据库中检索
    DataRow[] drs= data.Tables ["订单"].Select("CustID='"+custID+"'");

    for(int i=drs.GetLength(0)-1;i>=0;i--)
       drs[i].Delete();
               
    da = new SqlDataAdapter("select * from pdctorders where custid='" + custID + "'", cnnstring);
    da.Fill(data, "订单");

    drs = data.Tables["合同"].Select("CustID='" + custID + "'");
    for (int i = drs.GetLength(0) - 1; i >= 0; i--)
       drs[i].Delete();
    data.AcceptChanges();

    da = new SqlDataAdapter("select * from SaleContracts where custid='" + custID + "'", cnnstring);
    da.Fill(data, "合同");
    可以进一步考虑:
    是否每次都要从数据库中检索呢?
    个人觉得可以使用row的tag标记记录是否第一次展开。否则就不再从数据库中检索。
    当然也要提供一种机制,可强制从数据库中再次检索。

  • 相关阅读:
    django 项目 crm 关于展示表的细节
    djagngo crm 项目 展示页面 和分页
    django项目 crm登录 注册
    django项目 crm表结构一些常用的字段
    django认证 auth
    django form组件
    json和ajax技术
    VS 2013编译64位版本QT 4.8.6及使用cmake为依赖QT生成VS项目时Could NOT find Qt4
    使用国内pypi源来安装python包
    [转]ubuntu 下无法启动chrome
  • 原文地址:https://www.cnblogs.com/chump/p/2348380.html
Copyright © 2011-2022 走看看