با سلام.
چطور ميشه با كليك راست موس روي DataGridView، سطري رو كه روش راست كليك شده انتخاب كرد؟
با سلام.
چطور ميشه با كليك راست موس روي DataGridView، سطري رو كه روش راست كليك شده انتخاب كرد؟
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;
}
}
}
من تست نکردم اما شما زحمتش رو بکش به من هم خبر بده
قبل از انتخاب سطر این کد رو استفاده کنید
GridView.SelectedIndex= null;
شهاب جان اینی که گفتی خوبه ولی تمایزی بین منو ی باز شده در فضای خالی گرید ویو با منوی سطر های قائل نمیشه . در واقع دو تا منو برای گرید ویو میخوام .
datagridview.curentcell باید جواب بده
سلام عزیز، وقتی داری 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 { }
}