using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ICSharpCode.Core;
using Mesnac.Basic;
namespace Mesnac.Gui.Edit.Dialog
{
public partial class FrmDataItem : Form
{
private int level = 2; //节点默认展开级别
private int selectlevel = 3; //默认检索级别
private string caption = StringParser.Parse(ResourceService.GetString("Mesnac_Dialog_Caption"));
public FrmDataItem()
{
InitializeComponent();
this.InitUIMethod();
this.InitMethod();
}
///
/// 初始化界面元素值
///
public void InitUIMethod()
{
this.Text = StringParser.Parse(ResourceService.GetString("Mesnac_Dialog_FrmDataItem_Text"));
this.label1.Text = StringParser.Parse(ResourceService.GetString("Mesnac_Dialog_FrmDataItem_label1"));
this.btnOk.Text = StringParser.Parse(ResourceService.GetString("Mesnac_Dialog_btnOK"));
this.btnCancel.Text = StringParser.Parse(ResourceService.GetString("Mesnac_Dialog_btnCancel"));
this.btnRefresh.Text = StringParser.Parse(ResourceService.GetString("Mesnac_Dialog_FrmDataItem_btnRefresh"));
}
///
/// 初始化方法
///
public void InitMethod()
{
//防止跨线程访问控件报告异常
if (this.InvokeRequired)
{
this.BeginInvoke(new Mesnac.Basic.CallBackDelegate(this.InitMethod));
return;
}
try
{
TreeNode root = new TreeNode();
TreeNode tmproot = DataSourceFactory.Instance.Root.Clone() as TreeNode; //克隆根节点
root.Text = tmproot.Text;
this.IniTree(root, tmproot, txtFilter.Text);
this.treeView1.Nodes.Clear();
this.treeView1.Nodes.Add(root);
foreach (TreeNode n in this.treeView1.Nodes)
{
this.Expand(n, this.level);
}
}
catch (Exception ex)
{
ICSharpCode.Core.LoggingService.Error(ex.Message);
}
}
//列表检索
private void IniTree(TreeNode node, TreeNode cur, string Filter)
{
foreach (TreeNode actionnode in cur.Nodes)
{
if (actionnode.Parent.Level <= this.selectlevel)
{
if (actionnode.Level == selectlevel && actionnode.Text.IndexOf(Filter, StringComparison.OrdinalIgnoreCase) >= 0)
{
TreeNode child = new TreeNode();
child.Name = actionnode.Text;
child.ToolTipText = actionnode.ToolTipText;
child.Text = actionnode.Text;
node.Nodes.Add(child);
this.IniTree(child, actionnode, Filter);
}
else if (actionnode.Level != selectlevel)
{
TreeNode child = new TreeNode();
child.Name = actionnode.Text;
child.ToolTipText = actionnode.ToolTipText;
child.Text = actionnode.Text;
node.Nodes.Add(child);
this.IniTree(child, actionnode, Filter);
}
}
}
}
//展开节点
public void Expand(TreeNode parent, int level)
{
if (parent.Level <= level)
{
parent.Expand();
foreach (TreeNode node in parent.Nodes)
{
if (node.Level <= level)
{
node.Expand();
}
this.Expand(node, level);
}
}
}
///
/// 选择节点
///
///
///
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
if (e.Node.Level <= this.level)
{
//MessageBox.Show("请选择表、视图或字段!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
this.lblInfo.Text = StringParser.Parse(ResourceService.GetString("Mesnac_Dialog_FrmDataItem_lblInfo")); //"请选择表、视图或字段!";
return;
}
else
{
this.lblInfo.Text = String.Empty;
}
if (e.Node.Level == 3) //选择的数据对象(表、视图)
{
this.txtCurrent.Text = String.Format("[{0}].[{1}]", e.Node.Parent.Parent.Text, e.Node.Text);
}
if (e.Node.Level == 4) //选择的字段
{
this.txtCurrent.Text = String.Format("[{0}].[{1}].[{2}]", e.Node.Parent.Parent.Parent.Text, e.Node.Parent.Text, e.Node.Text);
}
}
///
/// 数据项
///
public string DataItem
{
get { return this.txtCurrent.Text; }
}
///
/// 数据刷新
///
///
///
private void btnRefresh_Click(object sender, EventArgs e)
{
Mesnac.Gui.Edit.ViewContent.DisplayUtil.ResetProjectDataSourceFactory(this.InitMethod);
}
private void btnOk_Click(object sender, EventArgs e)
{
if (String.IsNullOrEmpty(this.txtCurrent.Text))
{
string msg = StringParser.Parse(ResourceService.GetString("Mesnac_Dialog_FrmDataItem_Msg1")); //"请选择或输入要绑定的数据节点!格式:[数据源].[数据对象]/[数据源].[数据对象].[数据列]"
MessageBox.Show(msg, caption, MessageBoxButtons.OK, MessageBoxIcon.Information);
this.txtCurrent.Focus();
return;
}
this.DialogResult = DialogResult.OK;
}
private void btnCancel_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
}
private void txtFilter_TextChanged(object sender, EventArgs e)
{
this.InitMethod();
}
}
}