araz_pashazadeh
دوشنبه 25 مهر 1390, 13:51 عصر
با سلام خدمت دوستان
من سرویسی طراحی کردم برای جدا کردن اطلاعات داخل گرید به صورت 3رقم 3رقم که کد آن بصورت زیر می باشد: using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
namespace TextBoxColumnFilter
{
public class TextBoxColumn : DataGridViewColumn
{
public TextBoxColumn() : base(new TextBoxCell())
{
}
public override DataGridViewCell CellTemplate
{
get
{
return base.CellTemplate;
}
set
{
if (value != null && !value.GetType().IsAssignableFrom(typeof(TextBoxCe ll)))
{
throw new InvalidCastException("Error");
}
base.CellTemplate = value;
}
}
}
public class TextBoxCell : DataGridViewTextBoxCell
{
public TextBoxCell() : base()
{
}
public override Type EditType
{
get
{
return typeof(EditTextBoxCell);
}
}
public override void InitializeEditingControl(int rowIndex, object initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)
{
base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle);
EditTextBoxCell editingControl = base.DataGridView.EditingControl as EditTextBoxCell;
if (editingControl != null)
{
editingControl.BorderStyle = BorderStyle.None;
editingControl.AcceptsReturn = editingControl.Multiline = dataGridViewCellStyle.WrapMode == DataGridViewTriState.True;
editingControl.MaxLength = this.MaxInputLength;
string str = initialFormattedValue as string;
if (str == null)
{
editingControl.MyText = string.Empty;
}
else
{
editingControl.MyText = str;
}
}
}
}
public class EditTextBoxCell : TextBox, IDataGridViewEditingControl
{
DataGridView dataGridView;
private bool valueChanged = false;
int rowIndex;
public EditTextBoxCell()
: base()
{
}
// اگر میخواهید عداد سه تا سه تا جدا شود
bool discreteNumeric = true;
// اگر میخواهید تنها هنگام تایپ کردن سه تا سه تا جدا شود
bool discreteNumOnlyView = false;
public string MyText
{
get
{
if (discreteNumeric)
return base.Text.Replace(",", "");
else
return base.Text;
}
set
{
base.Text = value;
}
}
protected override void OnTextChanged(EventArgs e)
{
if (discreteNumeric)
{
string strText = this.MyText;
for (int i = strText.Length - 3; i > 0; i = i - 3)
{
strText = strText.Insert(i, ",");
}
this.SelectionStart = strText.Length + 1;
this.MyText = strText;
}
base.OnTextChanged(e);
this.NotifyDataGridViewOfValueChange();
}
public bool DiscreteNumeric
{
get
{
return discreteNumeric;
}
set
{
discreteNumeric = value;
}
}
protected override void OnKeyPress(KeyPressEventArgs e)
{
if (!((int)e.KeyChar >= 48 && (int)e.KeyChar <= 57) && e.KeyChar != 8)
e.KeyChar = char.MinValue;
}
#region IDataGridViewEditingControl Members
public void ApplyCellStyleToEditingControl(DataGridViewCellSty le dataGridViewCellStyle)
{
// استفاده نشد
}
public DataGridView EditingControlDataGridView
{
get
{
return dataGridView;
}
set
{
dataGridView = value;
}
}
public object EditingControlFormattedValue
{
get
{
if (discreteNumOnlyView)
return this.MyText;
else
return this.Text;
}
set
{
this.MyText = (string)value;
}
}
public int EditingControlRowIndex
{
get
{
return rowIndex;
}
set
{
rowIndex = value;
}
}
public bool EditingControlValueChanged
{
get
{
return valueChanged;
}
set
{
valueChanged = value;
}
}
public bool EditingControlWantsInputKey(Keys keyData, bool dataGridViewWantsInputKey)
{
switch (keyData & Keys.KeyCode)
{
case Keys.Left:
case Keys.Up:
case Keys.Down:
case Keys.Right:
case Keys.Home:
case Keys.End:
case Keys.PageDown:
case Keys.PageUp:
case Keys.Enter:
return true;
default:
return false;
}
}
public Cursor EditingPanelCursor
{
get { return base.Cursor; }
}
public object GetEditingControlFormattedValue(DataGridViewDataEr rorContexts context)
{
return EditingControlFormattedValue;
}
//protected override void OnTextChanged(EventArgs e)
//{
// base.OnTextChanged(e);
// this.NotifyDataGridViewOfValueChange();
//}
private void NotifyDataGridViewOfValueChange()
{
this.valueChanged = true;
this.dataGridView.NotifyCurrentCellDirty(true);
}
public void PrepareEditingControlForEdit(bool selectAll)
{
if (selectAll)
{
base.SelectAll();
}
else
{
base.SelectionStart = this.Text.Length;
}
}
public bool RepositionEditingControlOnValueChange
{
get { return false; }
}
#endregion
}
}
این سرویس درست کار می کنه مشکلی هم نداره ولی در هنگام لود کردن گرید اطلاعات به صورت 3رقم 3رقم جدا نمیشه وقتی فیلد مورد نظر از داخل گرید را انتخاب می کنم جدا میشه.
با چه تغییراتی در این کد می تونم اطلاعات را در هنگام لود جدا کنم؟
دوستان لطفا من را در این زمینه راهنمایی کنن
من سرویسی طراحی کردم برای جدا کردن اطلاعات داخل گرید به صورت 3رقم 3رقم که کد آن بصورت زیر می باشد: using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
namespace TextBoxColumnFilter
{
public class TextBoxColumn : DataGridViewColumn
{
public TextBoxColumn() : base(new TextBoxCell())
{
}
public override DataGridViewCell CellTemplate
{
get
{
return base.CellTemplate;
}
set
{
if (value != null && !value.GetType().IsAssignableFrom(typeof(TextBoxCe ll)))
{
throw new InvalidCastException("Error");
}
base.CellTemplate = value;
}
}
}
public class TextBoxCell : DataGridViewTextBoxCell
{
public TextBoxCell() : base()
{
}
public override Type EditType
{
get
{
return typeof(EditTextBoxCell);
}
}
public override void InitializeEditingControl(int rowIndex, object initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)
{
base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle);
EditTextBoxCell editingControl = base.DataGridView.EditingControl as EditTextBoxCell;
if (editingControl != null)
{
editingControl.BorderStyle = BorderStyle.None;
editingControl.AcceptsReturn = editingControl.Multiline = dataGridViewCellStyle.WrapMode == DataGridViewTriState.True;
editingControl.MaxLength = this.MaxInputLength;
string str = initialFormattedValue as string;
if (str == null)
{
editingControl.MyText = string.Empty;
}
else
{
editingControl.MyText = str;
}
}
}
}
public class EditTextBoxCell : TextBox, IDataGridViewEditingControl
{
DataGridView dataGridView;
private bool valueChanged = false;
int rowIndex;
public EditTextBoxCell()
: base()
{
}
// اگر میخواهید عداد سه تا سه تا جدا شود
bool discreteNumeric = true;
// اگر میخواهید تنها هنگام تایپ کردن سه تا سه تا جدا شود
bool discreteNumOnlyView = false;
public string MyText
{
get
{
if (discreteNumeric)
return base.Text.Replace(",", "");
else
return base.Text;
}
set
{
base.Text = value;
}
}
protected override void OnTextChanged(EventArgs e)
{
if (discreteNumeric)
{
string strText = this.MyText;
for (int i = strText.Length - 3; i > 0; i = i - 3)
{
strText = strText.Insert(i, ",");
}
this.SelectionStart = strText.Length + 1;
this.MyText = strText;
}
base.OnTextChanged(e);
this.NotifyDataGridViewOfValueChange();
}
public bool DiscreteNumeric
{
get
{
return discreteNumeric;
}
set
{
discreteNumeric = value;
}
}
protected override void OnKeyPress(KeyPressEventArgs e)
{
if (!((int)e.KeyChar >= 48 && (int)e.KeyChar <= 57) && e.KeyChar != 8)
e.KeyChar = char.MinValue;
}
#region IDataGridViewEditingControl Members
public void ApplyCellStyleToEditingControl(DataGridViewCellSty le dataGridViewCellStyle)
{
// استفاده نشد
}
public DataGridView EditingControlDataGridView
{
get
{
return dataGridView;
}
set
{
dataGridView = value;
}
}
public object EditingControlFormattedValue
{
get
{
if (discreteNumOnlyView)
return this.MyText;
else
return this.Text;
}
set
{
this.MyText = (string)value;
}
}
public int EditingControlRowIndex
{
get
{
return rowIndex;
}
set
{
rowIndex = value;
}
}
public bool EditingControlValueChanged
{
get
{
return valueChanged;
}
set
{
valueChanged = value;
}
}
public bool EditingControlWantsInputKey(Keys keyData, bool dataGridViewWantsInputKey)
{
switch (keyData & Keys.KeyCode)
{
case Keys.Left:
case Keys.Up:
case Keys.Down:
case Keys.Right:
case Keys.Home:
case Keys.End:
case Keys.PageDown:
case Keys.PageUp:
case Keys.Enter:
return true;
default:
return false;
}
}
public Cursor EditingPanelCursor
{
get { return base.Cursor; }
}
public object GetEditingControlFormattedValue(DataGridViewDataEr rorContexts context)
{
return EditingControlFormattedValue;
}
//protected override void OnTextChanged(EventArgs e)
//{
// base.OnTextChanged(e);
// this.NotifyDataGridViewOfValueChange();
//}
private void NotifyDataGridViewOfValueChange()
{
this.valueChanged = true;
this.dataGridView.NotifyCurrentCellDirty(true);
}
public void PrepareEditingControlForEdit(bool selectAll)
{
if (selectAll)
{
base.SelectAll();
}
else
{
base.SelectionStart = this.Text.Length;
}
}
public bool RepositionEditingControlOnValueChange
{
get { return false; }
}
#endregion
}
}
این سرویس درست کار می کنه مشکلی هم نداره ولی در هنگام لود کردن گرید اطلاعات به صورت 3رقم 3رقم جدا نمیشه وقتی فیلد مورد نظر از داخل گرید را انتخاب می کنم جدا میشه.
با چه تغییراتی در این کد می تونم اطلاعات را در هنگام لود جدا کنم؟
دوستان لطفا من را در این زمینه راهنمایی کنن