PDA

View Full Version : حرفه ای: حرکت در داخل Datagridview



navidiran
چهارشنبه 18 آذر 1388, 19:14 عصر
سلام دوستان
من می خواهم در دیتاگرید با زدن دگمه enter ، خانه ها (Cells) را بصورت افقی پیمایش کنم. تا جایی که من می دانم دستور زیر این کار را باید انجام دهد و انجام هم می دهد اما بلافاصله برگشته و خانه پایینی را انتخاب می کند. خلاصه هر کار کرده ام با در بسته موجه شدم.
کسی می تواند کمکی در حل مشکل داشته باشد؟


(if (e.keychar == 13
}
;(int i = System.Convert.ToInt32(rowCounttxt.Text, 10
;( int j = System.Convert.ToInt32(ColumnCounttxt.Text, 10
; dataGridView1.Rows[i].Cells[j+1].Selected = true
{

seven7777777
چهارشنبه 18 آذر 1388, 22:06 عصر
سلام
شما باید در رویداد KeyPress کلید فشار داده شده رو handle کنی یعنی مقدار e.handled رو برابر true قرار بدی .
اینجوری عملیات مربوط به کلید Enter انجام نمیشه حالا می تونی عملیاتی که خودت می خوای رو به جاش انجام بدی ، به شکل زیر :

datagridview.currentrow.cells[i].selected = true;
اما نکته اینجا مقدار i هست که باید اونو به شکل فرمول زیر محاسبه کنی :

مقدار جدید i = ( مقدار قبلی 1 + i ) / تعداد ستونها

اینکار برای اینه که وقتی توی آخرین ستون بودی ارور نده .
البته اگه خواستی بعد از آخرین ستون بیاد ردیف بعدی اونم فرمول خودشو داره .

navidiran
پنج شنبه 19 آذر 1388, 13:48 عصر
دوست عزیز متاسفانه مشکل حل نشد.
برنامه زده شدن دگمه Enter را تشخیص می دهد. اما درست کار نمی کند. گاهی ردیف پایین و یک خانه جلو پرش دارد و گاهی ردیف پایین.
این قطعه خیلی وقتم را گرفته و هنوز کار نمی کند.


(if (e.KeyChar == 13
}
int i = System.Convert.ToInt32(dataGridView1.CurrentCell.C olumnIndex.ToString(),10;(
;dataGridView1.CurrentRow.Cells[i + 1].Selected = true
{

اگه ممکن هست کمکم کنید. چون واقعا تسلیم شدم.

mahdi87_gh
پنج شنبه 19 آذر 1388, 14:44 عصر
دوست عزیز خاصیت keyPreview از فرمت رو true کن و در رویداد keyDown کد زیر رو بنویس:

if (e.KeyCode == Keys.Enter)
SendKeys.Send("{Tab}");
البته وقتی که keyPreview رو تنظیم کنی روی بقیه کنترل های روی فرمت تاثیر میزاره، به این ترتیب که فوکوس رو به کنترل بعدی میده. می تونی از همون روش e.handled هم استفاده کنی و در عوض کد بالا رو بنویسی

navidiran
شنبه 21 آذر 1388, 12:43 عصر
ضمن تشکر از کمک دوستان عزیز. من تلاش زیادی انجام دادم که این مشکل حل شود. اما فعلا جواب نگرفته ام. درصورتی که جوابش را پیدا کنم سریعا در اینجا اعلام خواهم کرد که این مشکل برای سایر دوستان پیش نیاید.
الیته تا اینجا این نتیجه بدست آمده که با زده شدن دگه Enter فقط در ردیف آخر Grid بصورت افقی حرکت انجام می شود و در ردیفهای بالا حرکت بصورت ضربدری (یک ردیف پایین و یکی جلو) انجام می شود.

navidiran
شنبه 21 آذر 1388, 12:49 عصر
privatevoid dataGridView1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 13)
SendKeys.Send("{Tab}");
}
//-----------------------------------------------------------------------
privatevoid dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
// try
//{
int i = System.Convert.ToInt32(dataGridView1.CurrentCell.R owIndex.ToString(), 10);
int j = System.Convert.ToInt32(dataGridView1.CurrentCell.C olumnIndex.ToString(), 10);
if (dataGridView1.Rows[i].Cells[1].Selected)
{
if (mode1 == false)
{
mode1 = true;
tableStr = dataGridView1.Rows[i].Cells[1].Value.ToString().Trim();
Form f = newserviceShow();
f.ShowDialog();
}
if (mode1 == true)
{
//SendKeys.Send("{Tab}");
dataGridView1.Rows[i].Cells[1].Value = tableStr;
dataGridView1.Rows[i].Cells[2].Selected = true;
selectFee(dataGridView1.Rows[i], i + 1);
mode1 = false;
}
}

البته هنوز مشکی که گفتم باقی هست و برنامه با زدن enter یکی پایین و یکی جلو می رود.

seven7777777
شنبه 21 آذر 1388, 19:18 عصر
ببین روش زیر به کارت میاد البته یه کم باید بش ور بری که مثلا ردیف آخر رو هم درست بره و از این جور چیزا :


private void dataGridView1_KeyPress(object sender, KeyPressEventArgs e)
{
if ((Keys)e.KeyChar == Keys.Enter)
{
SendKeys.Send("{Tab}");
SendKeys.Send("{Up}");
}
}

navidiran
یک شنبه 22 آذر 1388, 15:41 عصر
دوستان ممنونم از راهنماییهای ارزشمند شما
راه حل را پیدا کردم.





privatevoid dataGridView1_KeyPress(object sender, KeyPressEventArgs e)
{
bool row = false;
if ((Keys)e.KeyChar == Keys.Enter)
{
if (row == false)
{
if (dataGridView1.CurrentCell.ColumnIndex != 5)
{
SendKeys.Send("{Tab}");
SendKeys.Send("{Up}");
}
if (dataGridView1.CurrentCell.ColumnIndex == 5)
{
SendKeys.Send("{Down}");
SendKeys.Send("{Home}");
row = true;
}
}
if (row == true)
{
SendKeys.Send("{Tab}");
row = false;
}
}
}