PDA

View Full Version : سوال: راست كليك بر روي dataGridView



h_r_sh
چهارشنبه 23 اردیبهشت 1388, 00:53 صبح
با سلام.

چطور ميشه با كليك راست موس روي DataGridView، سطري رو كه روش راست كليك شده انتخاب كرد؟

shahab_ss
چهارشنبه 23 اردیبهشت 1388, 08:01 صبح
private void GridV1_MouseDown(object sender, MouseEventArgs e)
{
DataGridView.HitTestInfo hitTestInfo;
if (e.Button == MouseButtons.Right)
{
hitTestInfo = GridV1.HitTest(e.X, e.Y);
if (hitTestInfo.Type == DataGridViewHitTestType.Cell)
{
GridV1.Rows[hitTestInfo.RowIndex].Selected = true;
}
}
}

h_r_sh
پنج شنبه 24 اردیبهشت 1388, 18:40 عصر
private void GridV1_MouseDown(object sender, MouseEventArgs e)
{
DataGridView.HitTestInfo hitTestInfo;
if (e.Button == MouseButtons.Right)
{
hitTestInfo = GridV1.HitTest(e.X, e.Y);
if (hitTestInfo.Type == DataGridViewHitTestType.Cell)
{
GridV1.Rows[hitTestInfo.RowIndex].Selected = true;
}
}
}

با تشكر از توجه شما. با اين روش اگر چند بار بر روي grid راست كليك شود انتخابهاي قبلي پاك نمي شود.

shahab_ss
پنج شنبه 24 اردیبهشت 1388, 19:30 عصر
من تست نکردم اما شما زحمتش رو بکش به من هم خبر بده :چشمک:
قبل از انتخاب سطر این کد رو استفاده کنید

GridView.SelectedIndex= null;

dr_ghezavat
شنبه 07 شهریور 1388, 00:49 صبح
شهاب جان اینی که گفتی خوبه ولی تمایزی بین منو ی باز شده در فضای خالی گرید ویو با منوی سطر های قائل نمیشه . در واقع دو تا منو برای گرید ویو میخوام .

modern_amin
چهارشنبه 29 تیر 1390, 10:13 صبح
datagridview.curentcell باید جواب بده

faravaghi
دوشنبه 24 مرداد 1390, 03:02 صبح
با سلام.

چطور ميشه با كليك راست موس روي DataGridView، سطري رو كه روش راست كليك شده انتخاب كرد؟

سلام عزیز، وقتی داری DataGridView رو پر می کنی مثلا همانند دستورات زیر بیا از BindingSource استفاده کن:

BindingSource Bs = new BindingSource();
Bs.DataSource = SqlCommand("SELECT * FROM Table_Name");
DataGridView1.DataSource = Bs;


البته خدمت سروران عزیز عرض کنم تابع SqlCommand که پارامتر ورودی اون یک دستور SQL است،دست سازه و کارش اینه که دستور SQL رو میگیره و خروجی یک DataTable برمی گردونه.
اینم بگم BindingSource که تعریف میکنید باید سراسری باشه. حالا تو رویداد MouseDown گریدویو تابع زیر رو بنویسد:

private void SelectRow(object sender, MouseEventArgs e)
{
try
{
Bs.Position = DataGridView1.HitTest(e.X, e.Y).RowIndex;
}
catch { }
}

بعدش یه ContextMenuStrip تعریف کنید هرچی منو دارید توش بذارید و در پارامتر ContextMenuStrip گریدویو اسم همین منو رو قرار بدهید. اگه خواستید که در صورت خالی بودن گریدویو منو باز نشه یا غیر فعال بشه یا هر کاری برید این بلا رو روی ContextMenuStrip در بیارید. که اینم اینجوریه که تو رویداد Opening منو این کد رو می نویسید:(من یه ContextMenuStrip با نام Menu تعریف کردم و داخلش منوهای مختلف گذاشتم.)

private void CheckIsRow(object sender, CancelEventArgs e)
{
try
{
if (DataGridView1.Rows.Count <= 0)
Menu.Enabled = false;
else
{
Menu.Enabled = true;
if (Convert.ToInt32(DataGridView1.CurrentRow.Cells["DgStatus"].Value)==1)
{
StatusTSM.Image = Properties.Resources.status_busy;
}
else if (Convert.ToInt32(DataGridView1.CurrentRow.Cells["DgStatus"].Value) == 0)
{
StatusTSM.Image = Properties.Resources.status_Nobusy;
}
}
}
catch { }
}