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标记记录是否第一次展开。否则就不再从数据库中检索。
    当然也要提供一种机制,可强制从数据库中再次检索。

  • 相关阅读:
    读取INI配置文件
    在VB编程中,若一行代码太长需要换行时,行尾要加什么符号
    使用order by和group by的分析
    转 Sqlserver_left join 、right join、 inner join 用法
    Python 字典(Dictionary)操作详解
    转sql server新增、修改字段语句(整理)
    Winform TextBox中只能输入数字的几种常用方法(C#)
    数据库的范式,第一、二、三、四、五范式、BC范式
    【操作系统】银行家算法
    转 图解排序算法(三)之堆排序
  • 原文地址:https://www.cnblogs.com/chump/p/2348380.html
Copyright © 2011-2022 走看看