ucqueryinst.cs

来自「以构建的方式来实现对通用的查询统计」· CS 代码 · 共 509 行 · 第 1/2 页

CS
509
字号
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
using dist.hb.EnvQueryStat.Pub;

namespace dist.hb.EnvQueryStat.QuerySet
{
  public partial class ucQueryInst : UserControl
  {
    public ucQueryInst()
    {
      InitializeComponent();
    }
    private OleDbConnection m_OleDbConn;
    public OleDbConnection OleDbConn
    {
      get { return m_OleDbConn; }
      set
      {
        if (value == null) return;
        if (value == m_OleDbConn) return;
        m_OleDbConn = value;
      }
    }
    private void splitterControl1_SplitterMoved(object sender, SplitterEventArgs e)
    {

    }


    //以下函数填充树(处理查询分类)
    //处理查询分类
    System.Data.DataTable m_QCTable;

    //绑定到查询分类表
    private void BindQCTable()
    {
      DataSet ds = new DataSet();
      string strSQL;
      strSQL = "SELECT QueryClassID,PQueryClassID,QueryClassName FROM FS_QueryInstClass";
      System.Data.OleDb.OleDbDataAdapter Adapter = new System.Data.OleDb.OleDbDataAdapter(strSQL, m_OleDbConn);

      Adapter.Fill(ds, "FS_QueryInstClass");
      m_QCTable = ds.Tables["FS_QueryInstClass"];
    }

    private void FillTree()
    {
      if (m_QCTable == null) return;
      DataRow[] drs = m_QCTable.Select("PQueryClassID is null");
      if (drs == null) return;
      FillTree(drs, null);
    }

    private void FillTree(DataRow[] drs, TreeNode pNode)
    {
      if (drs == null) return;
      if (drs.Length <= 0) return;
      foreach (DataRow row in drs)
      {
        //QueryClassID,PQueryClassID,QueryClassName
        TreeNode nd = AddNode(pNode, row["QueryClassName"].ToString(), row["QueryClassID"].ToString());
        DataRow[] NEWdrs = m_QCTable.Select("PQueryClassID =" + row["QueryClassID"]);
        FillTree(NEWdrs, nd);
        //增加查询实例节点(being)
        CreateQueryInstNode(nd);
        //增加查询实例节点(end)
      }
    }

    //以下函数处理查询实例
    System.Data.OleDb.OleDbDataAdapter m_QueryInstDbDataAdapter;
    System.Data.DataSet m_QueryInstDataSet;
    System.Data.DataTable m_QueryInstTable;
    OleDbCommandBuilder m_QueryInstCB;
    string m_strQueryInstTbl = "FS_QueryInst";
    int m_nQueryInstImageIndex = 6;
    //查询实例绑定
    private void BindQueryInstTable()
    {
      DataSet ds = new DataSet();
      string strSQL;
      strSQL = "SELECT * FROM " + m_strQueryInstTbl;
      m_QueryInstDbDataAdapter = new System.Data.OleDb.OleDbDataAdapter(strSQL, m_OleDbConn);

      m_QueryInstCB = new OleDbCommandBuilder(m_QueryInstDbDataAdapter);
      OleDbCommand cmd = new OleDbCommand();

      cmd.Connection = m_OleDbConn;
      //cmd.Transaction = m_tran;
      cmd.CommandType = CommandType.Text;
      cmd.CommandText = strSQL;
      m_QueryInstDbDataAdapter.SelectCommand = cmd;

      m_QueryInstDbDataAdapter.Fill(ds, m_strQueryInstTbl);
      m_QueryInstTable = ds.Tables[m_strQueryInstTbl];
      m_QueryInstDataSet = ds;
    }
    private void CreateQueryInstNode(TreeNode tr)
    {
      if (tr == null) return;
      DataRow[] drs = m_QueryInstTable.Select("QueryClassID =" + tr.Name);
      if (drs == null) return;
      if (drs.Length <= 0) return;
      foreach (DataRow row in drs)
      {
        TreeNode nd = AddNode(tr, row["QueryInstName"].ToString(), row["QueryInstID"].ToString());
        nd.ImageIndex = m_nQueryInstImageIndex;
        nd.SelectedImageIndex = m_nQueryInstImageIndex;
      }
    }
    private TreeNode NewQueryInst(TreeNode tn)
    {
      if (tn == null || tn.ImageIndex == m_nQueryInstImageIndex) return null;

      if (lookUpEdit1.GetColumnValue("AbstractQueryID") == null)
      {
        MessageBox.Show("请选择查询模板", "消息");
        return null;
      }

      DataRow row;
      row = m_QueryInstTable.NewRow();

      int iReturn = GetMaxID();//查询实例ID;
      row["QueryInstID"] = iReturn;
      row["AbstractQueryID"] = (int)lookUpEdit1.GetColumnValue("AbstractQueryID");//查询实例
      row["QueryClassID"] = Convert.ToInt32(tn.Name);
      row["QueryInstName"] = textBox_QueryInstName.Text;
      row["AttWinVisible"] = checkBox_attVisible.Checked;
      row["SpWinVisible"] = checkBox_SpacialVisible.Checked;

      m_QueryInstTable.Rows.Add(row);
      TreeNode newTN = AddNode(tn, textBox_QueryInstName.Text, iReturn.ToString());
      newTN.ImageIndex = m_nQueryInstImageIndex;
      return newTN;
    }

    private TreeNode ModifyQueryInst(TreeNode tn)
    {
      if (tn == null || tn.ImageIndex != m_nQueryInstImageIndex) return null;

      DataRow row;
      //选择的就是查询模板,找不到记录集的情况不应该出现
      DataRow[] drs = m_QueryInstTable.Select("QueryInstID=" + tn.Name);
      if (drs == null || drs.Length == 0)
      {
        MessageBox.Show("没有找到要更新的数据!", "消息");
        return null;
      }
      row = drs[0];
      if (lookUpEdit1.GetColumnValue("AbstractQueryID") == null)
      {
        MessageBox.Show("请选择查询模板", "消息");
        return null;
      }
      row["QueryInstID"] = Convert.ToInt32(tn.Name); 
      row["AbstractQueryID"] = (int)lookUpEdit1.GetColumnValue("AbstractQueryID");//查询实例
      row["QueryClassID"] = Convert.ToInt32(tn.Parent.Name);
      row["QueryInstName"] = textBox_QueryInstName.Text;
      row["AttWinVisible"] = checkBox_attVisible.Checked;
      row["SpWinVisible"] = checkBox_SpacialVisible.Checked;

      tn.Text = textBox_QueryInstName.Text;
      tn.ImageIndex = m_nQueryInstImageIndex;
      return tn;
    }

    //取最大值
    private int GetMaxID()
    {
      if (m_QueryInstTable == null) return 0;
      string strTemp = m_QueryInstTable.Compute("MAX(QueryInstID)", "").ToString();
      if (strTemp == "") return 1;
      else return 1 + Convert.ToInt32(strTemp);
    }

    //树节点操作
    private TreeNode AddNode(TreeNode pNode, string strTxt, string strKey)
    {
      if (pNode == null)
      {
        TreeNode pNode1 = treeView1.Nodes.Add(strKey, strTxt);//增加根节点
        return pNode1;
      }
      else
      {
        return pNode.Nodes.Add(strKey, strTxt);
      }
    }
    private void ucQueryInst_Load(object sender, EventArgs e)
    {
      BindQueryInstTable();//绑定查询实例表
      BindQCTable();//绑定查询分类表
      FillTree();
      InitLookupData();
      //实例化属性过滤对象
      proAttFilter = new clsProAttFilter();
      proAttFilter.OleDbConn = m_OleDbConn;
      treeView1.ExpandAll();
    }

    private void btnNew_Click(object sender, EventArgs e)
    {
      textBox_QueryInstName.Text = "";
    }

    private void btnSave_Click(object sender, EventArgs e)
    {
      if (textBox_QueryInstName.Text == "")
      {
        MessageBox.Show("查询实例名称不能为空!");
        return;
      }
      TreeNode tn = treeView1.SelectedNode;
      if (tn == null)
      {
        MessageBox.Show("查询分类不能为空!");
        return;
      }
      gridControl1.EmbeddedNavigator.Buttons.EndEdit.DoClick();
      //如果选择的是分类节点,则增加;如果选择的查询节点,则修改。
      if (tn.ImageIndex != m_nQueryInstImageIndex) tn = NewQueryInst(tn);
      else tn = ModifyQueryInst(tn);
      if (tn == null) return;
      tn.SelectedImageIndex = m_nQueryInstImageIndex;
      tn.ImageIndex = m_nQueryInstImageIndex;
      try
      {
        m_QueryInstDbDataAdapter.Update(m_QueryInstDataSet, m_strQueryInstTbl);
      }
      catch (Exception ex)
      {
        MessageBox.Show(ex.Message, "提示");
        return;
      }
      //保存属性过滤表
      proAttFilter.SaveAttFilterTable(Convert.ToInt32(tn.Name));//查询实例的ID
    }

    private void btnDelete_Click(object sender, EventArgs e)
    {
      TreeNode tn = treeView1.SelectedNode;
      if (tn == null || tn.ImageIndex != m_nQueryInstImageIndex)
      {
        MessageBox.Show("请选择查询模板!", "消息");
        return;
      }
      //选择的就是查询模板,找不到记录集的情况不应该出现
      DataRow[] drs = m_QueryInstTable.Select("QueryInstID=" + tn.Name);

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?