نقل قول: مشکل در DataGridView
خوب اگه فقط برای نمایش داده ها از دیتاگرید استفاده می کنید خاصیت های Enable Adding ,Editing,Deleting گرید رو UnChecked کنید
نقل قول: مشکل در DataGridView
از جوابتان خیلی ممنون اما:
من هم برای نمایش و هم برای ویرایش نیاز دارم.
بنابراین این روش برای من مناسب نیست.
1 ضمیمه
نقل قول: مشکل در DataGridView
سلام
میتونی اون column رو با این column به نام TextBoxColumn که کدش هست جایگزین کنی
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
namespace TextBoxColumnFilter
{
publicclass TextBoxColumn : DataGridViewColumn
{
public TextBoxColumn() : base(newTextBoxCell())
{
}
publicoverrideDataGridViewCell CellTemplate
{
get
{
returnbase.CellTemplate;
}
set
{
if (value != null && !value.GetType().IsAssignableFrom(typeof(TextBoxCell)))
{
thrownewInvalidCastException("Error");
}
base.CellTemplate = value;
}
}
}
publicclassTextBoxCell : DataGridViewTextBoxCell
{
public TextBoxCell() : base()
{
}
publicoverrideType EditType
{
get
{
returntypeof(EditTextBoxCell);
}
}
publicoverridevoid InitializeEditingControl(int rowIndex, object initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)
{
base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle);
EditTextBoxCell editingControl = base.DataGridView.EditingControl asEditTextBoxCell;
if (editingControl != null)
{
editingControl.BorderStyle = BorderStyle.None;
editingControl.AcceptsReturn = editingControl.Multiline = dataGridViewCellStyle.WrapMode == DataGridViewTriState.True;
editingControl.MaxLength = this.MaxInputLength;
string str = initialFormattedValue asstring;
if (str == null)
{
editingControl.Text = string.Empty;
}
else
{
editingControl.Text = str;
}
}
}
}
publicclassEditTextBoxCell : DataGridViewTextBoxEditingControl
{
public EditTextBoxCell() : base()
{
this.KeyPress += newKeyPressEventHandler(EditTextBoxCell_KeyPress);
}
void EditTextBoxCell_KeyPress(object sender, KeyPressEventArgs e)
{
if (!char.IsDigit(e.KeyChar) && ((int)e.KeyChar) != 8)
e.KeyChar = char.MinValue;
}
}
}
برای جابجا کردن Column هم میتونی از تابع ساده زیر استفاده کنی که درکد فرم هست
publicvoid AddMeTextBoxColumn(string ColumnName, string HeaderText)
{
int ColumnDisplayIndex = dataGridView1.Columns[ColumnName].DisplayIndex;
dataGridView1.Columns.Remove(ColumnName);
TextBoxColumn column_addcombo = newTextBoxColumn();
column_addcombo.DataPropertyName = ColumnName;
column_addcombo.Name = ColumnName;
column_addcombo.HeaderText = HeaderText;
column_addcombo.DisplayIndex = ColumnDisplayIndex;
dataGridView1.Columns.Add(column_addcombo);
}
نقل قول: مشکل در DataGridView
یه مشکلی با کد شما دارم
و آن این است که تابعی که برای جایجایی Column استفاده کرده ام وقتی از چند ستون استفاده می کنم مشکل پیش می آید.
یک ساده تر برای همین کاری که برنامه اتان انجام می دهد ندارید؟؟؟
همچنین از کمکتان خیلی ممنونم
منتظرم
نقل قول: مشکل در DataGridView
این مشکل با یک ifدر هنگام save حل میشه
نقل قول: مشکل در DataGridView
یک راه ساده تر که شما میتونی توسط کد زیر بعد از پر کردن DataGridView خودت هر ستونی که خواستی رو معین کنی که Cell سلولهای اون Column از چه کلاسی باشن یا بطور کلی CellTemplate رو مشخص کنی
dataGridView1.Columns[0].CellTemplate = new TextBoxCell();
یا
dataGridView1.Columns["ColumnName"].CellTemplate = new TextBoxCell();
کلاس TextBoxCell هم که کدش بالا هست و خودمون نوشتیم و هر جور که بخواهیم میتونیم تغییرش بدیم
نقل قول: مشکل در DataGridView
خیلی ممنون از پاسختان.
من می خواهم در دیتا گرید هیچ مقداری وارد نشود آیا این ممکن است؟؟؟
همچنین من می خواهم که با زدن کلید اینتر بجای رفتن به سطر بعد, به ستون بعدی برود. من برای اینکار در رویدادی که کلید فشرده شد اگر اینتر بود کلید Tab می فرستد.
ولی در هنگامی که فیلد در حال ویرایش است با زدن اینتر به سطر بعد می رود چگونه باید این مشکل را حل کنم؟؟؟
نقل قول: مشکل در DataGridView
این مشکل قابل حل نیست؟؟؟(با زدن اینتر به ستون بعدی برود)
نقل قول: مشکل در DataGridView
آقا بنده برسی کرد ولی به نتیجه ای نرسیدم
نقل قول: مشکل در DataGridView
میتونی تو رویداد keyprees تکس باکست این کد رو بنویسی تا فقط عدد بگیره
if(char.isdigit(e.keychar==false)e.handeled==true;
نقل قول: مشکل در DataGridView
rostamkhani خیلی از تون ممنونم
من مشکل رفتن به ستون بعد هنگام فشردن دکمه اینتر بعد از ویرایش سلول را دارم.
هنگامی که در حالت عادی است مشکلی نیست ولی در هنگام ویرایش نتوانستم کاری بکنم.
با تشکر از دوستان
نقل قول: مشکل در DataGridView
خواهش میکنم بنده هم از شما ممنونم باهم یه چیزی یاد گرفتیم
در مورد اینتر بعد از ویرایش هم تنها رویدادی که اتفاق می افتاد CellEndEdit بود و RowLeave ,CellStateChanged
که با مخلوط این سه تا هم کاری نتونستم بکنم
فکر کنم باید با Reflector http://www.aisto.com/roeder/dotnet باید کد DataGridView رو بکشیم بیرون و آن جوری که میخواهیم درستش کنیم
بنده قبلا برای بعضی از کلاسهای net. این کارو کردم و کار زیاد سختیم نیست
موفق باشید .
نقل قول: مشکل در DataGridView
من این راه حل این مشکل را پیدا کردم:
classmyDataGridView : DataGridView
{
protectedoverridebool ProcessDialogKey(Keys keyData)
{
if (keyData == Keys.Enter)
{
int col = this.CurrentCell.ColumnIndex;
int row = this.CurrentCell.RowIndex;
if (row != this.NewRowIndex)
{
if (col == (this.Columns.Count - 1))
{
col = -1;
row++;
}
this.CurrentCell = this[col + 1, row];
}
returntrue;
}
returnbase.ProcessDialogKey(keyData);
}
protectedoverridevoid OnKeyDown(KeyEventArgs e)
{
if (e.KeyData == Keys.Enter)
{
int col = this.CurrentCell.ColumnIndex;
int row = this.CurrentCell.RowIndex;
if (row != this.NewRowIndex)
{
if (col == (this.Columns.Count - 1))
{
col = -1;
row++;
}
this.CurrentCell = this[col + 1, row];
}
e.Handled = true;
}
base.OnKeyDown(e);
}
}
منبع: Make Enter Key Move to Next Column - MSDN Forums
نمونه دیگر: https://windowsclient.net/blogs/faqs...next-cell.aspx