PDA

View Full Version : سوال: چگونه با راست کلیک موس رکورد در دیتاگرید انتخاب شود



amir200h
سه شنبه 10 اردیبهشت 1392, 11:41 صبح
سلام به همه دوستان
من برای دیتاگریدم یه کانتکس منو گذاشتم. میخوام وقتی کاربر هرجای دیتا گرید راست کلیک کرد رکورد اون قسمت انتخاب بشه در واقع میخوام عمل چپ کلیک انجام بشه

aliasghar2
سه شنبه 10 اردیبهشت 1392, 14:17 عصر
سلام
فکر کنم این به کارت بیاد
if(e.Button == MouseButtons.Right)
{
var hti = MyDataGridView.HitTest(e.X, e.Y); MyDataGridView.ClearSelection();
MyDataGridView.Rows[hti.RowIndex].Selected = true;
}

amir200h
سه شنبه 10 اردیبهشت 1392, 22:28 عصر
مرسی ولی به خط زیر گیر میده.
e.Button و x
بعد نمیدونم تو کدوم رویداد بزارم؟

aliasghar2
سه شنبه 10 اردیبهشت 1392, 22:34 عصر
توی رویداد cellMouseClick باید این کد رو بنویسی

amir200h
سه شنبه 10 اردیبهشت 1392, 22:44 عصر
این خطارو میده
Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index

aliasghar2
سه شنبه 10 اردیبهشت 1392, 22:48 عصر
روی cell کلیک کردی و این خطارو داد

amir200h
سه شنبه 10 اردیبهشت 1392, 22:54 عصر
بله........

amir200h
چهارشنبه 11 اردیبهشت 1392, 14:14 عصر
دوستان دیگه ای نبودن جواب بدن؟

Mahmoud Zaad
چهارشنبه 11 اردیبهشت 1392, 14:42 عصر
سلام
توی همون رویداد کدهای زیر رو بنویسید

if (e.RowIndex != -1 && e.Button == MouseButtons.Right)
{
dataGridView1.Rows[e.RowIndex].Selected = true;
}

amir200h
چهارشنبه 11 اردیبهشت 1392, 14:55 عصر
ممنون دوست من. کدتون بدرستی کار میکرد ولی مشکل اینه که هردفه که کلیک میکنم رکورد قبلی که انتخاب شده بود هم دوباره انتخاب میشه

Mahmoud Zaad
چهارشنبه 11 اردیبهشت 1392, 15:58 عصر
این کد رو توی خط سوم اضافه کنی درست میشه
dataGridView1.ClearSelection();
یعنی در کل اینجوری میشه:
if (e.RowIndex != -1 && e.Button == MouseButtons.Right)
{
dataGridView1.ClearSelection();

dataGridView1.Rows[e.RowIndex].Selected = true;
}

Mahmoud.Afrad
چهارشنبه 11 اردیبهشت 1392, 18:30 عصر
این کد رو توی خط سوم اضافه کنی درست میشه
dataGridView1.ClearSelection();
یعنی در کل اینجوری میشه:
if (e.RowIndex != -1 && e.Button == MouseButtons.Right)
{
dataGridView1.ClearSelection();

dataGridView1.Rows[e.RowIndex].Selected = true;
}

این هم فایده نداره چون سطر جاری(currentrow) و سلول جاری(currentcell) تغییر نخواهد کرد. بهتره همین مقادیر رو مستقیما مقداردهی کنید:

private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.RowIndex >= 0 && e.ColumnIndex >= 0)
{
dataGridView1.CurrentCell = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];
}
}

Mahmoud Zaad
پنج شنبه 12 اردیبهشت 1392, 09:55 صبح
این هم فایده نداره چون سطر جاری(currentrow) و سلول جاری(currentcell) تغییر نخواهد کرد. بهتره همین مقادیر رو مستقیما مقداردهی کنید:

private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.RowIndex >= 0 && e.ColumnIndex >= 0)
{
dataGridView1.CurrentCell = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];
}
}

به نظرم از فایده داشتن که فایده داره ولی اینکه کدهای شما کمتره (یک خط) درسته و اون یه بحث دیگه است!