باسلام من تو برنامم میخوام با کلید اینتر کار کنم در دیتا گرید ویو مثلا با زدن اون به سلول بعد بره و مقدار سلول فعلی رو هم چک کنه و اگه شرط برقرار بود بیاد سلول های بعدی رو پر کنه و رو یه سلول خاص فوکوس انجام بدم .
ولی چون در حالت پیش فرض فقط زمانی که سلول خالی با کلید اینتر رویداد keyDown وkey press فراخوانی میشه و موقعی که سلول پره به سطر بعد در همون ستون نشانگر قرار میگیره نمیتونم اینکارارو انجام بدم .نمیدونم این مشکل رو چطور حل کنم سرچ کردم ولی چیزی پیدا نکرد .
ممنون میشم کمک کنید خیلی زمان گذاشتم برای این مسعله .باتشکر
private void dataGridView1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { e.SuppressKeyPress=true; int iColumn = dataGridView1.CurrentCell.ColumnIndex; int iRow = dataGridView1.CurrentCell.RowIndex; if (iColumn == dataGridView1.Columns.Count-1) dataGridView1.CurrentCell = dataGridView1[0, iRow + 1]; else dataGridView1.CurrentCell = dataGridView1[iColumn + 1, iRow]; } }
سلام خیلی ممنون بابت کد ولی من مشکلم اینکه وقتی که سلول پره رویداد keydown فراخوانی نمیشه و من میخوام وقتی پرهم هست به این رویداد بره .ممنون میشم کمک کنید.
با تشکر
باید فراخوانی بشه
private void dataGridView1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyData == Keys.Enter) { int col = dataGridView1.CurrentCell.ColumnIndex; int row = dataGridView1.CurrentCell.RowIndex; if (col < dataGridView1.ColumnCount - 1) { col ++; } else { col = 0; row++; } if (row == dataGridView1.RowCount) dataGridView1.Rows.Add(); dataGridView1.CurrentCell = dataGridView1[col, row]; e.Handled = true; } }
سلام عذر خواهم ولی شما اصن درست سوال من رو متوجه نشدین . من میخوام با زدن اینتر این رویداد لود شه که اصلا این اتفاق برای دیتا گرید نمیوفته وقتی سلول پره .کدی که شما قرار دادین برای رفتن به سلول بعد که این رو یه بار قرار دادین و الان نوع دیگه ی از کد. که من اینو نمیخوام من مشکلم اینه که وقتی سلول پر هست اصلا با enter رویداد keydown فراخوانی نمیشه و من نمیدونم این مشکل رو چطور حل کنم .
خواهش میکنم کمک کنید چون خیلی سرچ کردم ولی نشد .
با تشکر
سلام، لطفا کد مورد نظرتون رو قرار بدید تا بررسی کنیم .
باسلام
private void dataGridViewFactor_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData == Keys.Enter)
{
e.SuppressKeyPress = true;
int iColumn = dataGridViewFactor.CurrentCell.ColumnIndex;
int iRow = dataGridViewFactor.CurrentCell.RowIndex;
if (iColumn == 0 && dataGridViewFactor[iColumn, iRow].Value.ToString() != "")
{
string s = dataGridViewFactor[0, iRow].Value.ToString();
var all = from a in context.mojodi_anbars
join b in context.kalas on a.id equals b.id
where b.id == s
select new
{
b.name,
b.mony,
};
foreach (var item in all)
{
dataGridViewFactor.Rows[iRow].Cells[1].Value = item.name;
dataGridViewFactor.Rows[iRow].Cells[2].Value = item.mony;
if (iColumn == dataGridViewFactor.Columns.Count - 1)
dataGridViewFactor.CurrentCell = dataGridViewFactor[0, iRow + 1];
else
dataGridViewFactor.CurrentCell = dataGridViewFactor[3, iRow];
}
if (iColumn == 4 && dataGridViewFactor[2, iRow].Value.ToString() != "" && dataGridViewFactor[3, iRow].Value.ToString() != "")
{
int q = Convert.ToInt32(dataGridViewFactor[2, iRow].Value);
int c = Convert.ToInt32(dataGridViewFactor[3, iRow].Value);
dataGridViewFactor[iRow, iRow].Value = Convert.ToString(q * c);
jameqeimat += Convert.ToInt32(dataGridViewFactor[iColumn, iRow].Value);
dataGridViewFactor[iColumn, iRow + 1].Value = jameqeimat;
dataGridViewFactor[iColumn + 1, iRow + 1].Value = "جمع کل";
}
if (all.Count() == 0)
{
my_message.Messege.Text = "کالای با این کد وجود ندارد.";
my_message.No.Visible = false;
my_message.Yes.Visible = false;
my_message.Ok.Visible = true;
my_message.ShowDialog();
}
}
if (iColumn == 0 && dataGridViewFactor[iColumn, iRow].Value.ToString() == "")
{
if (dataGridViewFactor[ColumGrid, RowsGrid].Value.ToString() == "")
{
listkala li = new listkala();
li.ShowDialog();
}
}
}
}
این کدی هست که میخوام اجرا بشه ولی وقتی سلول پرمیشه این رویداد فراخوانی نمیشه که کد برنامم اجرا بشه .
ممنون میشم کمک کنید بیشتر از یه هفتست که درگیر این موضوعم روش های مختلفی امتحان کردم ولی متاسفانه به نتیجه نرسیدم .
حتی خواستم کلید اینتر رو برای خود صفحه ی که درون دیتاگریدم هست در رویداد صفحه تبدیل به کلید دیگه ی کنم که اون هم جواب نداد .
دوست عزیز، شما بجای استفاده از رویداد KeyDown از CellLeave استفاده کنید.
KeyDown هر کلیدی که روی گرید زده شود اون رویداد صدا زده می شود ولی در حالت leave شما با enter یا tab فقط یکبار رویداد رو صدا می زنید.
خیلی ممنون از راهنمایتون ولی این کار رو هم انجام دادم چون میخوام همون سلول رو مقدارش رو چک کنم خطای nullrefrenc میده و نمیتونم این کار رو بکنم .
اگه ممکنه یه راه دیگه پیشنهاد بدین.
عکس خطا رو قرار دادم .
ممنون
کل پروژه یا اون بخش از پروژه تون رو به همراه دیتابیس به صورت zip شده اینجا قرار بدید تا من خط به خط چک کنم.
من فایل ضمیه را برداشتم ، میتونید الان حذفش کنید .
سلام
وقت کردید برنامم رو ببینید؟؟
سلام
روشی برای حل این مشکل من هست؟؟
ممنون میشم یه جوابی به من بدین .
با تشکر
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)