datagridview的数据辅助选择窗口
|
本想重写DataGridViewColumn来实现上述功能,无奈在绑定数据后自定义事件总是无法触发,这个可能跟绑定数据有关。只好另觅他径。好不容易整出如上图这个东西,赶紧记录下来,以备后用。 一、新建一数据辅助窗口,即被调用者,代码如下: 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; namespace Share { public partial class Frm_DataBrowse : Form { private DataGridViewTextBoxEditingControl BrowserTextBox; private Timer T = new Timer(); public Frm_DataBrowse(DataGridViewTextBoxEditingControl sender, Rectangle rect)
{ InitializeComponent();
//以下通过设置一个时钟定时检测鼠标左键点击位置来隐藏弹出的模式对话框 BrowserTextBox = sender; SetPosition( sender, rect); private void Copy_OnClick(object sender, EventArgs e) /// <summary> int screenRight = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Right; if (rect.Left < screenLeft) if (rect.Top < screenTop) private void T_Tick(object sender, EventArgs e)
二、新建一主窗口,即调用者,代码如下:
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 MODEL.Program;
using MODEL.Department; using BLL.Program; using CustomUserControl; using BLL.Order;
using BLL.Department; using MODEL.Order; using Share; using System.Data.Common;
using System.Data.SqlClient; using DAL.DbManager; namespace NgeShoesPMC.Order
{ public partial class Form_OrderReport : BaseForm { Frm_DataBrowse frm_Department; Frm_DataBrowse frm_OrderStatus; private int SelectedProgramID = -1; private int SelectedDepartmentID = -1; private int OldSelectedDepartmentID = -1; private int OldSelectedProgramID = -1; SqlConnection conn;
SqlDataAdapter APT; DataSet OrderDataSet; public Form_OrderReport()
{ InitializeComponent(); conn =(SqlConnection) DbHelper.getConn();
if (conn.State == ConnectionState.Closed) { conn.Open(); } APT = new SqlDataAdapter(order_Oprate.SQL_ORDERDETAILS_SELECT_ORDERBY_ACTUALSTARTTIME, conn);//定义dataadapter
SqlParameter p = new SqlParameter("@DepartmentID", SelectedProgramID); APT.SelectCommand.Parameters.Add(p); OrderDataSet = new DataSet(); FillOrder(); } /// <summary> /// 填入订单 /// </summary> private void FillOrder() { OrderDataSet.Clear(); APT.SelectCommand.Parameters["@DepartmentID"].Value = SelectedDepartmentID; APT.Fill(OrderDataSet); dataGridView1.DataSource = OrderDataSet.Tables[0];//完成数据绑定,datagridview可以显示数据源了 } private void Form_OrderReport_Load(object sender, EventArgs e)
{ fillTreeView(); } private void fillTreeView()
{ List<ProgramDetails> li = Program_Oprate.getProgramsAndDepartments(); Cursor.Current = Cursors.WaitCursor; tv_Department.BeginUpdate(); tv_Department.Nodes.Clear(); foreach (ProgramDetails p in li) { tv_Department.Nodes.Add(new TreeNode(p.ProgramName + "_p" + p.ID)); foreach (DepartmentDetails dpt in p.Departments) { tv_Department.Nodes[li.IndexOf(p)].Nodes.Add( new TreeNode(dpt.DepartmentName + "_d" + dpt.ID)); } } Cursor.Current = Cursors.Default; tv_Department.EndUpdate(); }
private DataTable GetDataTable(int ProgramID) { DataTable dt = Department_Oprate.getAllDepartmentsIdAndNamByProgramID(ProgramID); return dt; } private void tv_Department_DoubleClick(object sender, EventArgs e)
{ string nodeText = tv_Department.SelectedNode.Text; int idx = nodeText.IndexOf("_d"); if (idx >= 0) { SelectedDepartmentID = Convert.ToInt32(nodeText.Substring(idx + 2)); DataTable dt = order_Oprate.getOrderDetailsOrderByActualStartTime(SelectedDepartmentID); TreeView tv = (TreeView)sender; SelectedProgramID = Convert.ToInt32(tv.SelectedNode.Parent.Text.Substring(tv.SelectedNode.Parent.Text.IndexOf("_p") + 2)); } if (OldSelectedDepartmentID != SelectedDepartmentID) { //dataGridView1.DataSource = order_Oprate.getOrderDetailsOrderByActualStartTime(SelectedDepartmentID); FillOrder(); OldSelectedDepartmentID = SelectedDepartmentID; } if (OldSelectedProgramID != SelectedProgramID) { OldSelectedProgramID = SelectedProgramID; if (frm_Department != null) { frm_Department.dataGridView.DataSource = GetDataTable(SelectedProgramID); } } }
private void Form_OrderReport_Resize(object sender, EventArgs e)
if (frm_Department == null)
//重写按键命令处理程序,以截获dataGridView编辑状态下的按键。 //按回车时 } private void dataGridView1_CellValidated(object sender, DataGridViewCellEventArgs e)
以后copy这些代码适当修改修改就可以直接使用啦。
|
浙公网安备 33010602011771号