PDA

View Full Version : سوال: استفاده از کلید اینتر در دیتاگریدویو



Mahmoud Zaad
دوشنبه 02 آبان 1390, 12:12 عصر
سلام دوستان
من می خوام توی دیتاگریدویو زمانیکه مثلا روی یکی از سلول های ستون اول کلید اینتر زده شد بقیه سلول های اون ردیف از مقادیری که توی بانک ذخیره شده پر بشه، کدهایی که نوشتم زمانیکه سلول فعال نیست کار می کنند اما زمانیکه کاربر متنی رو تایپ می کنه و اینتر رو می زنه جواب نمی ده. چه باید کرد؟!!!

nilmil_nil
دوشنبه 02 آبان 1390, 16:56 عصر
اون عملیات رو توی رویداد End Edit بنویس فکر کنم جواب بده

Mahmoud Zaad
دوشنبه 02 آبان 1390, 17:15 عصر
ممنون که جواب دادید اما فکر می کنم باید توی رویداد KeyDown بنویسم و بعد از زدن اینتر اطلاعات از بانک بیاد کدی که الآن می نویسم اینه
if (e.KeyCode == Keys.Enter)
{
//دریافت اطلاعات از بانک
e.Handled = true;
}
اما زمانی که کلمه رو تایپ می کنم و اینتر می زنم جواب نمی ده ولی وقتی که سلول فعال نیست یعنی ادیتش تموم شده جواب می ده، من مورد اول رو می خوام.

Mahmoud Zaad
دوشنبه 02 آبان 1390, 20:24 عصر
این کد رو توی رویداد KeyDown نوشتم اما هر بار که اینتر رو می زنی یه پیغام جدید اضافه میشه مثلا اولین بار که یه سلول رو ویرایش میکنی یه پیغام میده، سلول دوم دوتا و... مشکل چیه؟
dataGridView1.EditingControlShowing += (senderObject, eventArgs) =>
{
eventArgs.Control.PreviewKeyDown += (sa, ea) =>
{
if (ea.KeyCode == Keys.Return)
{
messagebox.show("???");
}
};
};

ali_habibi1384
سه شنبه 03 آبان 1390, 02:00 صبح
نكته اينجاست كه شما بين رويداد end edit و begin edit نميتوني رويدادي داشته باشي حال اينكه كد كليد شما ميخواد بين اين دو عمل كنه. رويداد keydown مربوط به گريد هست نه سلولي از گريد بنابراين شما ميتوني از رويدادهايي مثل endedit يا cellchanged يا از اين قبيل استفاده كني و نميتوني رويداد keydown و كليدهاي فشرده شده توي سلول گريد رو هندل كني.
گريد ويو توي رويدادهاي داخل سلولهاش ضعيف عمل كرده و اين هم يكي از ضعفهاشه.

Mahmoud Zaad
سه شنبه 03 آبان 1390, 09:59 صبح
با تشکر از همه دوستان
اول باید از حرکت در سلول ها جلوگیری کرد( با زدن کلید اینتر) بعد توی رویداد cellendedit عمل مورد نظر رو انجام داد.
private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
e.Handled = true;
}
}