⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 datagriddoubleclickcolumn.h

📁 Visual C++.net数据库开发经典案例
💻 H
字号:
#pragma once


using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Diagnostics;
using namespace System::Windows::Forms;
using namespace System::Drawing;
using namespace System::Data;
using namespace System::Collections;

 
namespace My
{
	/// <summary> 
	/// DataGridDoubleClickColumn 摘要
	/// </summary>
	__gc public class DataGridDoubleClickColumn :   public System::Windows::Forms::DataGridColumnStyle
	{
	public:
		TextBox* _textBox;
		bool _inEdit;
	public:
		DataGridDoubleClickColumn(DataGrid* dataGrid)
		{
			InitializeComponent();
			_textBox = new TextBox();
			dataGrid->Controls->Add(_textBox);
			_textBox->Visible = false;
			_inEdit = false;
		}
		DataGridDoubleClickColumn(System::ComponentModel::IContainer *container) : components(0)
		{
			/// <summary>
			/// Windows.Forms 类撰写设计器支持所必需的
			/// </summary>

			container->Add(this);
			InitializeComponent();
		}
		
	protected: 
		void Dispose(Boolean disposing)
		{
			if (disposing && components)
			{
				components->Dispose();
			}
			__super::Dispose(disposing);
		}
				
	private:
		/// <summary>
		/// 必需的设计器变量。
		/// </summary>
		System::ComponentModel::Container *components;


		
		/// <summary>
		/// 设计器支持所需的方法 - 不要用代码编辑器
		///修改此方法的内容。
		/// </summary>		
		void InitializeComponent(void)
		{
			components = new System::ComponentModel::Container();
		}
	protected:
		void Abort(int rowNum) {
			_inEdit = false;
			_textBox->Hide();
		}
		/// <summary>
		/// Standard override
		/// </summary>
		/// <param name="dataSource"></param>
		/// <param name="rowNum"></param>
		/// <returns></returns>
		bool Commit(CurrencyManager* dataSource,int rowNum)
		{
			if(!_inEdit)
			{
				return true;
			}
			try
			{
				Object* _value = _textBox->Text;
				if(NullText->Equals(_value))
				{
					_value = System::Convert::DBNull; 
				}
				this->SetColumnValueAtRow(dataSource, rowNum, _value);
			}
			catch(...)
			{
				return false;
			}
			__finally
			{
				_inEdit = false;
				_textBox->Hide();
			}
			return true;
		}
		
		/// <summary>
		/// Standard override
		/// </summary>
		/// <param name="source"></param>
		/// <param name="rowNum"></param>
		/// <param name="bounds"></param>
		/// <param name="readOnly"></param>
		/// <param name="instantText"></param>
		/// <param name="cellIsVisible"></param>
		void Edit(CurrencyManager* source, int rowNum, Rectangle bounds, bool readOnly, String* instantText, bool cellIsVisible)
		{
			_textBox->Text = "";
			//Rectangle _originalBounds = bounds;
			//_oldValue = _comboBox->Text;
	
			if(!cellIsVisible) return;

			bounds.Offset(2, 1);
			bounds.Width -= 2* 2;
			bounds.Height -= 1;
			_textBox->Bounds = bounds;
			_textBox->Visible = true;
			//_comboBox.BringToFront();
			//_comboBox.Focus();
			
			_textBox->Text = GetText(GetColumnValueAtRow(source, rowNum));
			
			if(instantText != NULL)
			{
				_textBox->Text = instantText;
				//int End = _comboBox->Text->Length;
				//_comboBox->Select(End, 0);
			} 
			else
			{
				_textBox->SelectAll();
			}

			//this.DataGridTableStyle.DataGrid.Invalidate(OriginalBounds);
			//_comboBox.BringToFront();
			_inEdit = true;
		}
		
		/// <summary>
		/// Standard override
		/// </summary>
		/// <returns></returns>
		int GetMinimumHeight() {
			return _textBox->PreferredHeight + 1;
		}
		
		/// <summary>
		/// Standard override
		/// </summary>
		/// <param name="g"></param>
		/// <param name="val"></param>
		/// <returns></returns>
		int GetPreferredHeight(Graphics* g ,Object* val) 
		{
			return FontHeight  + 1;
		}
		
		/// <summary>
		/// Standard override
		/// </summary>
		/// <param name="g"></param>
		/// <param name="val"></param>
		/// <returns></returns>
		Size GetPreferredSize(Graphics* g, Object* val)
		{
			Size _extents = Size::Ceiling(g->MeasureString(GetText(val), this->DataGridTableStyle->DataGrid->Font));
			_extents.Width += 2;
			_extents.Height += 1;
			return _extents;
		}
		
		/// <summary>
		/// Standard override
		/// </summary>
		/// <param name="g"></param>
		/// <param name="bounds"></param>
		/// <param name="source"></param>
		/// <param name="rowNum"></param>
		void Paint(Graphics* g,Rectangle bounds,CurrencyManager* source,int rowNum)
		{
			Paint(g, bounds, source, rowNum, false);
		}

		/// <summary>
		/// Standard override
		/// </summary>
		/// <param name="g"></param>
		/// <param name="bounds"></param>
		/// <param name="source"></param>
		/// <param name="rowNum"></param>
		/// <param name="alignToRight"></param>
		void Paint(Graphics* g,Rectangle bounds,CurrencyManager* source,int rowNum, bool alignToRight)
		{
			String* _text = GetText(GetColumnValueAtRow(source, rowNum));			
			
			PaintText(g, bounds, _text, alignToRight);
		}

		// Helper functions
	private:
		void PaintText(Graphics* g ,Rectangle bounds, String* text,bool alignToRight)
		{
			Brush* _backBrush = new SolidBrush(this->DataGridTableStyle->BackColor);
			Brush* _foreBrush= new SolidBrush(this->DataGridTableStyle->ForeColor);
			Rectangle _rect = bounds;
			RectangleF _rectF  = RectangleF::op_Implicit(_rect); 
			StringFormat* _format = new StringFormat();
			if(alignToRight) {
				_format->FormatFlags = StringFormatFlags::DirectionRightToLeft;
			}
			switch(this->Alignment) {
				case HorizontalAlignment::Left:
					_format->Alignment = StringAlignment::Near;
					break;
				case HorizontalAlignment::Right:
					_format->Alignment = StringAlignment::Far;
					break;
				case HorizontalAlignment::Center:
					_format->Alignment = StringAlignment::Center;
					break;
			}
			_format->FormatFlags =StringFormatFlags::NoWrap;
			g->FillRectangle(_backBrush, _rect);
			_rect.Offset(0, 1);
			_rect.Height -= 1;
			g->DrawString(text, this->DataGridTableStyle->DataGrid->Font, _foreBrush, _rectF, _format);
			_format->Dispose();
		}

		String* GetText(Object* val) 
		{
			if(val == System::DBNull::Value)
			{
				return this->NullText;
			}
			if(val != NULL)
			{
				return val->ToString();
			}
			else
			{
				return String::Empty;
			}
		}
	};
}

⌨️ 快捷键说明

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